題目鏈結
題目描述
在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數p。並將p對1000000007取模的結果輸出。 即輸出p%1000000007
輸入描述:
題目保證輸入的陣列中沒有的相同的數字
資料範圍:對於%50的資料,size<=10^4
對於%75的資料,size<=10^5
對於%100的資料,size<=2*10^5
示例1
輸入1,2,3,4,5,6,7,0
輸出7
解題思路1、實際上是進行一次歸併排序,先將分組定為1,前後比較,12比較,34比較、56比較,70比較,結束結果為1,2,3,4,5,6,0,7,此時結果res已經為1
2、將分組定為2,1234進行比較,5607進行比較,結束結果為1,2,3,4,0,5,6,7,此時res結果為1+2=3
3、將分組定位4,12340567進行比較,結束結果為0,1,2,3,4,5,6,7,此時res結果為3+4=7
4、需要注意的是在題目分割陣列的時候,不一定都是2的冪次方,所以需要調整array1和array2陣列的大小
通過**public
class
solution
//如果第乙個陣列已經遍歷到結尾,則不需要繼續往下
if(j==len)
break
;int m=i;if(
(j+i)
>len) m=len-j;
int[
] array2=
newint
[m];
for(
int k=
0;k,k++
)sort
(array, array1, array2,start,i);}
}return res%
1000000007;}
public
void
sort
(int
array,
int[
] array1,
int[
] array2,
int start,
int len)
else}if
(p}else
}for
(int j=start,k=
0;k,k++);
}}
程式設計題 陣列中的逆序對
順序掃瞄整個陣列,每掃瞄到乙個數字的時候,逐個比較該數字和它後面的數字的大小。如果後面的數字比它小,則這兩個數字就組成乙個逆序對。假設陣列中含有n個數字,由於每個數字都要和o n 個數字作比較,因此這個演算法的時間複雜度是o n2 對陣列進行氣泡排序,交換次數即為逆序對個數。時間複雜度o n2 採用...
刷題 陣列中的逆序對
在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數p。並將p對1000000007取模的結果輸出。即輸出p 1000000007。用類似歸併排序的思路。coding utf 8 class solution definverse...
51題陣列中的逆序對
題目描述 在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數p。並將p對1000000007取模的結果輸出。即輸出p 1000000007 思路 使用了歸併排序的思想 class solution else if m start...