牛客劍指offer第三十五題(陣列中的逆序對)

2021-09-27 08:32:53 字數 1235 閱讀 9354

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數p。並將p對1000000007取模的結果輸出。 即輸出p%1000000007

複製陣列,將新的陣列進行排序,然後逐個取出並刪除新陣列中的最小數,在原陣列中找到其位置,在他前面有多少個數,這個最小數就能組成多少個逆序對,然後在原陣列中刪除這個最小的數進入下乙個最小數的逆序對求解,直到新陣列為空。

**實現

import copy

class solution:

def inversepairs(self, data):

if len(data) < 2:

return 0

nums = copy.copy(data)

nums.sort()

stack =

res = 0

while stack:

cur = stack.pop()

res += data.index(cur)

data.remove(cur)

if nums != :

return res%1000000007

顯然,複雜度太大不可能在指定時間內通過所有測試用例,需要用到歸併排序的求解方法

**實現

class solution:

def inversepairs(self, data):

# 採用歸併排序的思想,時間複雜度為o(nlogn)

global count

count=0

def a(array):

global count

if len(array)<=1:

return array

k=int(len(array)/2)

left=a(array[:k])

right=a(array[k:])

l=0r=0

result=

while lif left[l]l+=1

else:

r+=1

count+=len(left)-l

result+=left[l:]

result+=right[r:]

return result

a(data)

return count%1000000007

劍指Offer第三十五題 陣列中的逆序對

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數p。並將p對1000000007取模的結果輸出。即輸出p 1000000007 題目保證輸入的陣列中沒有的相同的數字 資料範圍 對於 50的資料,size 10 4 對於 75的...

LeetCode第三十五題 Python實現

title leetcode no.35 categories tags 給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。你可以假設陣列中無重複元素。示例 1 輸入 1,3,5,6 5 輸出 2 示例 2 輸入 1,3,5,6 ...

Leetcode第三十五題 搜尋插入位置

題目 給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。你可以假設陣列中無重複元素。示例 1 輸入 1,3,5,6 5 輸出 2 示例 2 輸入 1,3,5,6 2 輸出 1 示例 3 輸入 1,3,5,6 7 輸出 4 示例 4...