題目描述
在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數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 }
題解:冒泡(超時)
1public
static
int inversepairs(int
array)
5int len=array.length;
6int count=0;
7for(int i=0;i)15}
16}17return count%1000000007;
18 }
測試:
1public
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...