LeetCode 統計陣列中逆序對的個數

2021-10-18 22:56:29 字數 1037 閱讀 5409

題目描述:

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對.輸入乙個陣列,求出這個陣列中

的逆序對的總數p.並將p對1000000007取模的結果輸出.即輸出p%1000000007.

note:

2<=n<=50000;

example 1:

input:nums=[9,6,8,5]

output:5

explanation:there are numbers of inversion,like:[9,6],[9,8],[9,5],[6,5],[8,5]

解題思路:

方法1:

暴力破解,雙層遍歷,超時.

方法2:

利用分治思想中的歸併陣列演算法.

*/

c++語言實現 

#include #include using namespace std;

class solution

private:

int merge_sort(vector& board,vector& nums,int l,int r)

int mid=(l+r)>>1;

int l_num=merge_sort(board,nums,l,mid)%1000000007;

int r_num=merge_sort(board,nums,mid+1,r)%1000000007;

return (l_num+r_num+merge(board,nums,l,mid,r))%1000000007;

}int merge(vector& board,vector& nums,int l,int mid,int r)

int ans=0,i=l,j=mid+1,k=l;//初始化,i指向左半部分的起始索引位置l,j指向右半部分的起始索引位置mid+1.

while(k<=r)else if(j>r)else if(nums[i]nums=;

cout

}

統計陣列的逆序對

題目描述 在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。題目 思路 這個最簡單的當然是直接統計了,演算法時間複雜度為n 2,氣泡排序都可以。如果想進一步減少時間複雜度的話,可以考慮用遞迴的方法,比如使用歸併排序。下面貼 i...

《劍指offer》 統計陣列中逆序對的個數

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數p。並將p對1000000007取模的結果輸出。即輸出p 1000000007 例如輸入 1,2,3,4,5,6,7,0 輸出 7 public class inversepai...

陣列中逆序對統計方法

首先闡述一下逆序對的概念。假設有乙個陣列為array 0.n 其中有元素a i a j 如果 當ia j 那麼我們就稱 a i a j 為乙個逆序對。那麼統計乙個陣列中的逆序對,有什麼作用呢。逆序對可以反映插入排序的效率問題,如果逆序對數量多,那麼插入排序的效率就低,反之亦然。那麼如何快速的找到逆序...