题解 | #数组中的逆序对#

数组中的逆序对

https://www.nowcoder.com/practice/96bd6684e04a44eb80e6a68efc0ec6c5

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param nums int整型一维数组 
# @return int整型
#

class Solution:
    mod = 1000000007
    def MergeSort(self, left: int, right: int, data: List[int], temp: List[int]) -> int:
         # 停止划分
        if left >= right:
            return 0
        # 取中间
        mid = int((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
            
    def InversePairs(self , data: List[int]) -> int:
        n = len(data)
        res = [0 for i in range(n)]
        return self.MergeSort(0, n - 1, data, res)
		
Error: 
class Solution:
    mod = 100000007

    def MergeSort(self,left:int, right:int, data: list[int], temp:list[int]) -> int:
        if left >= right:
            return 0
        mid = int((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

    def InversePairs(self , data: List[int]) -> int:
        # write code here
        """归并排序思路
        1.划分阶段;
        2.排序阶段;
        3.合并阶段
        """
        n = len(data)
        res = [0 for i in range(n)]
        return self.MergeSort(0,n-1,data,res)

全部评论

相关推荐

脑子烧了,这是什么规律啊。1,10,19,37,64,(&nbsp;)
hl7:0*9+1 1*9+1 2*9+1 4*9+1 7*9+1,9的系数是前两个系数相加再加1?
投递美团等公司10个岗位
点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客nb666号:看数据范围, -1e4~1e4, 用一个计数数组存一下, 再按个数让k减到0就行; 堆排不是O(n)的, 快速选择算法是O(n)但随机性较强
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务