劍指35 陣列中的逆序對

2021-10-22 04:48:27 字數 1103 閱讀 1436

劍指35 - 陣列中的逆序對

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數p。並將p對1000000007取模的結果輸出。 即輸出p%1000000007

輸入描述:

題目保證輸入的陣列中沒有的相同的數字

示例1輸入

[1,2,3,4,5,6,7,0]

返回值7

解法一:暴利求解,n^2

public class solution 

// 遍歷陣列,一次判斷後面是否有比當前數小的

long cnt = 0;

for(int i = 0; i< array.length; i++) }}

return (int)(cnt%1000000007);

}}

解法二:在歸併排序中計數

public class solution

// 歸併排序,核心是先分、後治

divide(array, 0, array.length-1);

// 返回cnt

return cnt;

}private void divide(int array, int start, int end)

int mid = start + ((end - start) >> 1);

// 前半部分不斷二分

divide(array, start, mid);

// 後半部分不斷二分

divide(array, mid+1, end);

// 治,從前到後,兩兩合併、四四合併、八八合併

merge(array, mid, start, end);

}private void merge(int array, int mid, int start, int end) else

}while(i<=mid)

while(j<=end)

// 將temp的數覆蓋原陣列

for(int x=0; x小總結:

歸併排序多寫寫,分治思想

劍指offer No 35 陣列中的逆序對

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

劍指offer35 陣列中的逆序對

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

劍指Offer(35) 陣列中的逆序對

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數p。並將p對1000000007取模的結果輸出。即輸出p 1000000007。例如輸入,輸出5對。分治思想,採用歸併排序的思路來處理。在合併兩個有序序列時,同時計算逆序對數。對...