陣列中的逆序數

2021-10-01 09:18:31 字數 801 閱讀 3643

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數p。並將p對1000000007取模的結果輸出。 即輸出p%1000000007

解題思路: 先把陣列分割成子陣列,先統計出子陣列內部的逆序對的數目,然後再統計出兩個相鄰子陣列之間的逆序對的數目。在統計逆序對的過程中,還需要對陣列進行排序。如果對排序演算法很熟悉,我們不難發現這個過程實際上就是歸併排序。

class solution 

int length=(end-start)/2;

long long left=inversepairscore(copy,data,start,start+length);

long long right=inversepairscore(copy,data,start+length+1,end);

int i=start+length;

int j=end;

int indexcopy=end;

long long count=0;

while(i>=start&&j>=start+length+1)

else

}for(;i>=start;i--)

copy[indexcopy--]=data[i];

for(;j>=start+length+1;j--)

copy[indexcopy--]=data[j];

還應該反過來copy給data賦值

return left+right+count;

}};

求陣列的逆序數

題目 在乙個排列中,如果一對數的前後位置與大小順序相反,即前面的數大於後面的數,那麼它們就稱為乙個逆序。乙個排列中逆序的總數就稱為這個排列的逆序數。現在,給你乙個n個元素的序列,請你判斷出它的逆序數是多少。比如 1 3 2 的逆序數就是1。方法1 o n 2 這個就不說了。方法2 借助歸併排序達到o...

陣列元素的逆序數

求乙個n個元素的逆序數 例如 的逆序數為 0 2 0 1 0 3 最直接的求解逆序數方法時間複雜度為o n 2 如果用分治的策略可以將時間複雜度降為o n logn 求n個元素的逆序數的分治思想如下 首先求前n 2個元素的逆序數,再求後n 2個 元素的逆序數,最後在排序過程中合併前後兩部分之間的逆序...

樹狀陣列求逆序對(逆序數)

逆序數 也叫逆序對 在乙個排列中,如果一對數的前後位置與大小順序相反,即前面的數大於後面的數,那麼它們就稱為乙個逆序。乙個排列中逆序的總數就稱為這個排列的逆序數。無重複的數 include include include include include include using namespace...