题目描述
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007
输入描述:
题目保证输入的数组中没有的相同的数字
数据范围:
对于%50的数据,size<=10^4
对于%75的数据,size<=10^5
对于%100的数据,size<=2*10^5
示例1
输入
1,2,3,4,5,6,7,0
输出
7
解法一:辅助函数/递归法
class Solution:
def InversePairs(self, data):
# write code here
if len(data) == 0:
return 0
copy = [num for num in data]
cnt = self.InversePairsCore(data, copy, 0, len(data) - 1)
return cnt % 1000000007
def InversePairsCore(self, data, copy, start, end):
if start == end:
copy[start] = data[start]
return 0
mid = (start + end) / 2
left = self.InversePairsCore(copy, data, start, mid)
right = self.InversePairsCore(copy, data, mid + 1, end)
i, j, index, cnt = start, mid+1, start, 0
while i <= mid and j <= end:
if data[i] <= data[j]:
copy[index] = data[i]
i += 1
else:
copy[index] = data[j]
cnt += mid-i+1
j += 1
index += 1
while i <= mid:
copy[index] = data[i]
i += 1
index += 1
while j <= end:
copy[index] = data[j]
j += 1
index += 1
return left + right + cnt