微軟100題 求陣列中的逆序對

2021-06-07 07:37:15 字數 876 閱讀 4401

求陣列中的逆序對的個數:在陣列a中如果a[i]>a[j].且i稱為乙個逆序數對,例如陣列是7,5 ,6 ,4 則逆序對共有 

7,5   7,6  7,4   5,4   6,4  五個逆序對,剛開始的時候沒有思路,看了看解答之後發現,還是採用分治的思想,類似於用歸併演算法實現,

空間複雜度為n,需要乙個額外的陣列來儲存,時間複雜度為log2n(2是下標了,懶得打公式了)。具體的**可看一下何海濤裡面的圖示。

記錄一下我的**吧,

//這個程式是求陣列中的逆序對的

//劍指offer一書中的36題

#includeusing namespace std;

int b[100];

int n;

int countreversion(int a, int begin, int end)

else

}else if( begin ==end)

return 0;

else if( end>(begin+1))

if( q>=(mid+1) && a[p]>a[q])

else if( q<(mid+1))

}if(p=(mid+1))// 這部分要注意,是處理左陣列已經全部都複製到臨時陣列裡了,但是右陣列還有剩餘}}

for(int i=begin ; i<=end; i++)

a[i]=b[i];

return number;

}}int main()

for(int k=0; k

提供幾組測試資料:

n=7   a: 6 7 4 3 5 1 2  結果為17

n=7   a:1 2 3 4 5 6 7  結果為0

n=7   a:7 6 5 4 3 2 1  結果為21

演算法題 求陣列的逆序對

在陣列中的兩個數字如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。給你乙個陣列,求出這個陣列中逆序對的總數。概括 如果a i a j 且 i j,a i 和 a j 構成乙個逆序對。樣例 序列 2,4,1,3,5 中,有 3 個逆序對 2,1 4,1 4,3 則返回 3 思路 最簡單的想...

求陣列逆序對

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數p。並將p對1000000007取模的結果輸出。即輸出p 1000000007 題目保證輸入的陣列中沒有的相同的數字 資料範圍 對於 50的資料,size 10 4 對於 75的...

求陣列逆序對

思路 類似歸併排序演算法,在合併已經有序的相鄰子陣列的時候,計算前面陣列相對於後面陣列的逆序對數,整個遞迴過程可以算出所有逆序對 include void merge int a,int front,int middle,int end,int count else if j end while j...