我什么都不会,甚至官解都看不懂
代码如下:
class Solution:
mod = 1000000007
def InversePairs(self , data: List[int]) -> int:
n = len(data)
temp = [0 for i in range(n)]
return self.mergeSort(0, n - 1, data, temp)
def mergeSort(self, left: int, right: int, data: List[int], temp: List[int]) -> int:
if left >= right:
return 0
mid = (left + right) // 2
res = self.mergeSort(left, mid, data, temp) + self.mergeSort(mid + 1, right, data, temp)
res %= self.mod
i, j = left, mid + 1
for k in range(left, right + 1):
temp[k] = data[k]
for k in range(left, right + 1):
if i == mid + 1:
data[k] = temp[j]
j += 1
elif j == right + 1 or temp[i] <= temp[j]:
data[k] = temp[i]
i += 1
else:
data[k] = temp[j]
j += 1
res += mid - i + 1
return res % self.mod
其中,temp 列表负责暂存排序后的两个数组
第二个 for 循环中的 if-else 语句负责控制数组的合并以及低位元素的大小比较
通过合并时的大小比较来确定每次合并时有多少逆序对
然后递归返回逆序对个数