面試題36 陣列中的逆序列

2021-06-16 20:14:28 字數 938 閱讀 2028

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

思路:利用歸併排序思想,將序列不斷分割,對每個部分計算逆序數,並排序,每個部分之間再進行比較,同時記錄逆序對。

源**:

#include "stdio.h"

int inversepairscore(int* data,int* copy,int start,int end)

int length =(end - start)/2;

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

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

int i=start+length;

int j=end;

int indexcopy=end;

int 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];

return left+right+count;

}int inversepairs(int* data,int length)

{ if(data == null || length <0)

return 0;

int* copy=new int[length];

for(int i =0;i

result:5press any key to continue

面試題36 陣列中的逆序對

題目 在陣列中的兩個數字如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。例如,有乙個陣列為array 0.n 其中有元素a i a j 如果 當ia j 那麼我們就稱 a i a j 為乙個逆序對。在陣列中一共存在5對逆序對,分別是 7,6 7...

面試題36 陣列中的逆序對

1.在陣列中的兩個數字如果前面的乙個數字大於後面的數字,則這兩個數字組成乙個逆序對,輸入乙個陣列,求這個陣列中的逆序對的總數。分析 例如在陣列中,一共存在5個逆序對,常規的做法是每次確定乙個數字在陣列中後面有多少個數比他小,這樣的時間複雜度是o n n 比較大,可以先將大的陣列分為小的陣列,再統計逆...

面試題36 陣列中的逆序對

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