程式設計題 陣列中的逆序對

2021-10-03 18:28:33 字數 1278 閱讀 9856

題目鏈結

題目描述

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數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...