题解 | #数组中的逆序对#
数组中的逆序对
https://www.nowcoder.com/practice/96bd6684e04a44eb80e6a68efc0ec6c5
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param data int整型一维数组
# @return int整型
# 思路就是一个归并排序,只是过程中多了一个计算大小的个数
class Solution:
def __init__(self) -> None:
self.res = 0 # 这是目标逆序对数
def merge(self, left, right): # 归并算法的合并过程
i,j = 0, 0
subL = []
while i<len(left) and j<len(right):
if left[i] < right[j]:
subL.append(left[i])
i += 1
else:
subL.append(right[j])
j += 1
self.res += len(left) - i # 如果左边大于右边,那必有逆序,且逆序数为从左边这一位开始到结尾的个数
if i<len(left):
subL += left[i:]
if j < len(right):
subL += right[j:]
return subL
def Div(self , data: List[int]): # 归并排序的划分阶段
# write code here
n = len(data)
if n <= 1:
return data
mid = n//2
left = self.Div(data[:mid])
right = self.Div(data[mid:])
return self.merge(left, right)
def InversePairs(self , data: List[int]) -> int:
_ = self.Div(data) # 归并过程,但是我们不需要他
return self.res % 1000000007 # 只返回结果
查看8道真题和解析
