最近一直在家刷面經,因為疫情也出不去。所以沒事就會在知乎回答別人提出的問題,還有就是刷題。最近leetcode授權了劍指offer的題,然後就當作我是複習吧。目前還在刷,今晚吃飽刷到這道歸併排序的高階題目——陣列中的逆序對,所以寫一篇關於它的題解吧。
在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。例項
輸入:[7,
5,6,
4]輸出:5
限制:0<=陣列長度<=50000
其實這道題的本質就是歸併排序,如果對歸併排序不熟悉的話,請先看這篇文章:神級基礎排序——歸併排序
這個時候就當你會了歸併排序了。當進行合併操作的時候,如果nums[p1]>nums[p2]的話,那麼這個時候就組成逆序對。然後就是nums[p1]~nums[mid]都大於nums[p2],所以此時的逆序對數就是mid-p1+1。
package leetcode;
/** * @author god-jiang
* @date 2020/2/16 19:49
*/public
class
reversepairs
//歸併排序
public
void
mergesort
(int
nums,
int start,
int end)
}public
void
merge
(int
nums,
int start,
int mid,
int end)
else
}while
(p1 <= mid)
while
(p2 <= end)
for(
int i =
0; i < temp.length; i++)}
}
劍指offer系列 陣列中逆序對
題目描述 輸入乙個陣列,求出其中逆序對的總個數 示例 輸入 逆序對有,幾種情況 因此輸出5 分析 利用歸併排序的思想進行排序,時間複雜度o nlgn int inversepairscore vector nums,vector copy,int begin,int end int mid begi...
劍指Offer系列51 陣列中的逆序對
在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。示例 1 輸入 7,5,6,4 輸出 5 限制 0 陣列長度 50000 python 思路 利用陣列部分有序,採用歸併排序思想 輔助度 o nlogn class solut...
劍指offer系列28 陣列中的逆序對
這個題我拿到沒什麼好的思路,除了乙個個求的方法之外想不出效率更高的方法。這個題看劍指offer的意思是按照歸併排序的方法做的,順便複習一下歸併排序 看到這個題只要能想到用歸併排序的方法做就已經成功了一半了,其次就是一些細節問題。寫 你又思路,又會將思路用 寫出來才可以。只有思路不會寫 也不行。寫 的...