劍指Offer 35 陣列中的逆序對

2021-10-04 00:19:48 字數 1460 閱讀 9649

題目描述

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

輸入描述:

題目保證輸入的陣列中沒有的相同的數字資料範圍:對於%50的資料,size<=10^4對於%75的資料,size<=10^5對於%100的資料,size<=2*10^5

題解:歸併排序

1

//統計逆序對的個數

2private

static

intcnt;

3public

static

int inversepairs01(int

array)

7return

cnt;8}

9//歸併排序的分治---分

10private

static

void divide(int arr,int start,int

end)

15//

計算中間值,注意溢位

16int mid = start + (end - start)/2;

1718

//遞迴分

19divide(arr,start,mid);

20 divide(arr,mid+1,end);

21//治22

merge(arr,start,mid,end);23}

2425

private

static

void merge(int arr,int start,int mid,int

end)else39}

40//

各自還有剩餘的沒比完,直接賦值即可

41while(i<=mid)

44while(j<=end)

47//

覆蓋原陣列

48for (k = 0; k < temp.length; k++)

51 }

題解:冒泡(超時)

1

public

static

int inversepairs(int

array)

5int len=array.length;

6int count=0;

7for(int i=0;i)15}

16}17return count%1000000007;

18 }

測試:

1

public

static

void

main(string args) ;

3int pairs =inversepairs01(arr);

4system.out.println(pairs);5}

6 輸出:7

劍指offer35 陣列中的逆序對

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

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

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

劍指Offer 35 陣列中的逆序對

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