問題:
在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數p。並將p對1000000007取模的結果輸出。 即輸出p%1000000007
分析:(1)使用蠻力法進行窮舉:很遺憾,時間上只能通過50%;
(2)歸併排序+插入排序:很遺憾,時間上只能通過75%
code1:窮舉
publicint inversepairs(int
array)
//暴力破解:時間複雜度不滿足
long count = 0
;
for (int i = 1; i < array.length; i++) }}
int result = (int) count % 1000000007
; }
code2:歸併+插入
1public
int inversepairs(int
array) 5//
借鑑別人的思想,使用歸併排序
6long res = mergesort(array, 0, array.length - 1);7
system.out.println(res);
9return (int) (res % 1000000007
);10}11
//改進的歸併排序
12public
long mergesort(int dp, int start, int
end) else
if (len == 1
) else
25 } else
else41}
42if (j != i - 1
) 45}46
return (count + right +left);47}
48 }
code3:純歸併
歸併排序查詢逆序對
description let a 1 a n be a sequence of n numbers.if ia j then the pair i,j is called an inversion pair.the inversion number of a sequence is one com...
查詢陣列中的逆序對
name 查詢陣列中的逆序對 author date 10 01 18 13 57 description 題目描述 在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。輸入 每個測試案例包括兩行 第一行包含乙個整數n,表示陣列...
尋找逆序對
設a 1.n 是乙個包含n個不同數的陣列。如果在ia j 則 i,j 就成為a中的乙個逆序對 inversion 要確定乙個陣列中的逆序對的個數,可以採取分治法。將a分為兩部分a1和a2,則a中逆序對的數目等於a1中逆序對的數目 a2中逆序對的數目和a1,a2合併時a1中比a2中元素大的數目。inc...