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

数组中的逆序对

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)

全部评论

相关推荐

09-25 15:55
门头沟学院 Java
小肥罗:有道理哈哈真实真实
我的秋招日记
点赞 评论 收藏
分享
我的代码出BUG了:@美团@腾讯@字节跳动@阿里巴巴。你们好好看看吧,你们就挂我吧,到时候被人家鸽穿还得录取我
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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