面試題36 陣列中的逆序對

2022-07-27 11:24:14 字數 1266 閱讀 6738

【題目描述】

在陣列中的兩個數字如果前面乙個數字大於後面的乙個數字,則這兩個數字組成乙個逆序對。

輸入乙個陣列,求出這個陣列的逆序對的總數。

【解決方案】

基於歸併思想的解決方案。

我的**實現,僅供參考:

1

public

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的...