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

数组中的逆序对

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

class Solution:
    def merge_sort_and_count(self,arr):
        """
        归并排序并统计逆序对的数量
        Args:
            arr: 待排序的数组
        Returns:
            排序后的数组和逆序对的数量
        """
        if len(arr) <= 1:
            return arr, 0
    
        mid = len(arr) // 2
        left, left_count = self.merge_sort_and_count(arr[:mid])  # 对左半部分进行归并排序
        right, right_count = self.merge_sort_and_count(arr[mid:])  # 对右半部分进行归并排序
    
        merged, merge_count = self.merge_and_count(left, right)  # 归并左右两部分并统计逆序对数量
        total_count = left_count + right_count + merge_count  # 总逆序对数量
    
        return merged, total_count
    
    def merge_and_count(self, left, right):
        """
        合并左右两个有序数组并统计逆序对的数量
        Args:
            left: 左半部分有序数组
            right: 右半部分有序数组
        Returns:
            合并后的有序数组和逆序对的数量
        """
        merged = []
        count = 0  # 用于统计逆序对的数量
        i, j = 0, 0
    
        while i < len(left) and j < len(right):
            if left[i] <= right[j]:
                merged.append(left[i])
                i += 1
            else:
                merged.append(right[j])
                j += 1
                count += len(left) - i  # 统计逆序对数量
    
        merged.extend(left[i:])
        merged.extend(right[j:])
    
        return merged, count
    
    def InversePairs(self , data: list[int]) -> int:
        """
        计算逆序对的数量,并对结果取模
        Args:
            nums: 输入的整数数组
        Returns:
            逆序对数量取模的结果
        """
        _, count = self.merge_sort_and_count(data)
        return count % 1000000007

全部评论

相关推荐

刷牛客的我很豁达:你是不是对算法有什么误解,你没手握两篇顶刊顶会,还想搞算法岗,有顶刊顶会在算法岗算才入门
点赞 评论 收藏
分享
10-14 21:00
门头沟学院 Java
吃花椒的狸猫:这个人说的倒是实话,特别是小公司,一个实习生哪里来的那么多要求
点赞 评论 收藏
分享
今天 10:45
已编辑
门头沟学院 Java
昨天面美团,jvm,juc问的好深啊,感觉小林coding不太够喔,牛油们有没有什么推荐的八股网站嘛🕒&nbsp;岗位/面试时间👥&nbsp;面试题目🤔&nbsp;面试感受11.20更新初试已过,一直泡池子啊
明天不下雨了:小林Coding:https://xiaolincoding.com/ 全栈哥:https://www.pdai.tech/ Guide哥:https://javaguide.cn/ 秀哥:https://interviewguide.cn/ 沉默王二:https://javabetter.cn/home.html 磊哥:https://www.javacn.site/interview/basic/ 小傅哥:https://bugstack.cn/ 源码哥:https://doocs.github.io/source-code-hunter/#/ 各大厂的公众号技术文章和一些经典的书籍
面试太紧张了怎么办?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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