在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數p。並將p對1000000007取模的結果輸出。 即輸出p%1000000007
最直接的想法,是兩個for迴圈巢狀,求解所有的逆序對,但是複雜度太高。
後參考陣列中的逆序對,利用了歸併排序的想法,詳細思路參照:【演算法32】計算陣列中的逆序對
# -*- coding:utf-8 -*-
class solution:
def inversepairs(self, data):
# write code here
res,count=self.mergersort(data,0)
count=count%1000000007
return count
def mergersort(self,data,count):
n=len(data)
if n<=1:
return data,count
mid=n//2
left,countl=self.mergersort(data[:mid],count)
right,countr=self.mergersort(data[mid:],count)
count=countl+countr
ans=
p=len(left)
q=len(right)
l,r=0,0
while lif left[l]<=right[r]:
l+=1
else:
count=count+p-l
r+=1
ans+=left[l:]
ans+=right[r:]
return ans,count
陣列中的逆序對 牛客網
題意理解 給定乙個陣列,求逆序對的個數,所謂逆序對是指i j,但是aj ai.問題分析 歸併排序,複雜度降到o nlgn 細節1 歸併過程是先排序子陣列內部,再排序子陣列之間。細節2 排序子陣列內部,需要用到額外的空間,用輔助陣列作原始陣列,用當前陣列儲存一趟歸併的結果。細節3 排序子陣列之間的方法...
陣列中的逆序對(C 牛客網)
參考 解題思路 1 使用歸併排序,具體可參考上面那本書,注意每次交換copy和data,這樣可以避免拷貝從而節約時間 2 這裡需要注意的是,在牛客網中,下面 中的三處取模,一處都不可以少!class solution int inversepairscore vector data,vector i...
牛客網 劍指office 陣列中的逆序對
題目 在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數p。並將p對1000000007取模的結果輸出。即輸出p 1000000007 思路 歸併排序。先將陣列分為若干個長度相等的子陣列,然後在合併子陣列的時候進行排序 並統計逆...