[Leetcode][第315题][JAVA][计算右侧小于当前元素的个数][暴力][归并排序+索引数组]
生活随笔
收集整理的這篇文章主要介紹了
[Leetcode][第315题][JAVA][计算右侧小于当前元素的个数][暴力][归并排序+索引数组]
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【問題描述】[中等]
【解答思路】
1. 暴力 (超時)
時間復雜度:O(N^2) 空間復雜度:O(1)
public List<Integer> countSmaller(int[] nums) {List<Integer> ans = new ArrayList<Integer>();int n = nums.length;if(n==0){return ans;}for(int i=0;i<n-1;i++ ){int num=0;for(int j =i;j<n;j++ ){if(nums[j]<nums[i]){num++;}}ans.add(num);}//最后一個必為 0ans.add(0);return ans;}2. 歸并排序+索引數組
時間復雜度:O(NlogN) 空間復雜度:O(N)
【總結】
1. “歸并排序” 的細節
1、如果 “前有序數組” 和 “后有序數組” 直接合并的時候,就有序,就不必歸并;
2、在 “歸并” 的時候,全局使用一個臨時存儲數組,而不必每一個歸并都新建臨時的存儲空間。
2.出列一個元素的時候,馬上得到右邊比自己小的元素的個數,是通過不同的指針之間的距離得到的。
在編碼的時候,建議在草稿紙上寫寫畫畫,用具體的數值帶進去,才能確保你計算的指針之間的距離正確。
3.如果你寫過 “逆序數” 的計算的代碼,你就會發現,“逆序數” 的計算可以在 “前有序數組” 元素出列的時候計算逆序數,也可以在 “后有序數組” 元素出列的時候計算逆序數,你可以比較一下它們在編碼時候的不同之處。
轉載鏈接:https://leetcode-cn.com/problems/count-of-smaller-numbers-after-self/solution/gui-bing-pai-xu-suo-yin-shu-zu-python-dai-ma-java-/
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的[Leetcode][第315题][JAVA][计算右侧小于当前元素的个数][暴力][归并排序+索引数组]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 四大技巧轻松搞定云容器
- 下一篇: 2017 省赛选拨 想打架吗?算我一个!