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