【題目描述】
在陣列中的兩個數字如果前面乙個數字大於後面的乙個數字,則這兩個數字組成乙個逆序對。
輸入乙個陣列,求出這個陣列的逆序對的總數。
【解決方案】
基於歸併思想的解決方案。
我的**實現,僅供參考:
1public
static
int inversepairs(int
data)27
8int copy = new
int[data.length];910
for (int i = 0; i < data.length; i++)
11 copy[i] =data[i];
1213
int count = inversepairscore(data, copy, 0, data.length - 1
);14
15return
count;16}
1718
public
static
int inversepairscore(int data, int copy, int start, int
end)
1925
26int length = (end - start) / 2;27
28int left = inversepairscore(copy, data, start, start +length);
29int right = inversepairscore(copy, data, start + length + 1
, end);
3031
//i初始化為前半段最後乙個數字的下標
32int i = start +length;
33//
j初始化為後半段最後乙個數字的下標
34int j =end;
3536
int indexcopy =end;
37int count = 0;38
39while (i >= start && j >= start + length + 1)40
46else
4750}51
52for (; i >= start; i--)
5356
57for (; j >= start + length + 1; j--)
5861
62return left + right +count;
63 }
面試題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的...