牛客網 陣列中的逆序對

2021-08-22 11:30:36 字數 912 閱讀 8233

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數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 思路 歸併排序。先將陣列分為若干個長度相等的子陣列,然後在合併子陣列的時候進行排序 並統計逆...