1, 将原数组排序,然后从小到大遍历排序数组,求这个数在原数组中的index,这个index就代表有多少个数字在该数的前面并且大于这个数.注意:每次计算后要在数组中除掉这个数。
2, 第一种方法超时,题解第二种解法,首先以第一个元素作为对照,比这个数大的进入大数组,比对照数小的进入小数组,此时记录大数组的个数加上1,用result累加,就是此刻和该数对比有多少个逆序,然后递归操作大数组和小数组中的元素,直到元素个数为<=1.
# 方法一
class Solution:
def InversePairs(self, data):
# write code here
return self.solve(data) % 1000000007
def solve(self, arr):
if len(arr) <= 1:
return 0
pivot = arr[0]
big, small = [], []
res = 0
for i in arr[1:]:
if i > pivot:
big.append(i)
else:
small.append(i)
res += 1 + len(big)
return res + self.solve(big) + self.solve(small)
# write code here
s = Solution()
print(s.InversePairs([1, 2, 3, 4, 5, 6, 7, 0]))
# 方法二
class Solution:
def InversePairs(self, data):
data2 = sorted(data)
count = 0
for i in data2:
count += data.index(i)
data.remove(i) # 此时计算一次后要删除该元素
return count % 1000000007
京公网安备 11010502036488号