題目:在陣列中的兩個數字如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。
思路:利用歸併排序思想,將序列不斷分割,對每個部分計算逆序數,並排序,每個部分之間再進行比較,同時記錄逆序對。
源**:
#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的...