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