【归并】Leetcode 交易逆序对的总数

题目讲解

LCR 170. 交易逆序对的总数


算法讲解

还是使用分治算法的思想:我们可以先将数组分成两块,先求出左边部分的逆序对,右边部分的逆序对和一左一右的逆序对,三个数量相加就是当前数组中的所有逆序对;其次我们在求子数组逆序对的时候,可以把排序添加上,如果添加上排序,那么求左右部分的逆序对的时候就会很方便,只需要将下标相减即可

cpp 复制代码
class Solution {
    int temp[50002];
public:
    int reversePairs(vector<int>& record) {
        return Merge(record, 0 , record.size() - 1);
    }

    int Merge(vector<int>& nums, int left, int right)
    {
        int ret = 0;
        if(left >= right)return ret;
        int mid = left + (right - left) / 2;
        ret += Merge(nums, left, mid);
        ret += Merge(nums, mid+1, right);
        
        //处理一左一右 + 合并有序数组  升序
        int i = 0, cur1 = left, cur2 = mid+1;
        while(cur1 <= mid && cur2 <= right)
        {
            if(nums[cur1] <= nums[cur2])temp[i++] = nums[cur1++];
            else
            {
                ret += mid - cur1 + 1;
                temp[i++] = nums[cur2++];
            }
        }

        //处理cur指针没有结束的数组
        while(cur1 <= mid)temp[i++] = nums[cur1++];
        while(cur2 <= right)temp[i++] = nums[cur2++];

        //填充原来的数组
        for(int k = left; k <= right; k++)
        {
            nums[k] = temp[k - left];
        }
        return ret;
    }
};
相关推荐
yaoh.wang4 小时前
力扣(LeetCode) 13: 罗马数字转整数 - 解法思路
python·程序人生·算法·leetcode·面试·职场和发展·跳槽
T1ssy4 小时前
布隆过滤器:用概率换空间的奇妙数据结构
算法·哈希算法
hetao17338375 小时前
2025-12-12~14 hetao1733837的刷题笔记
数据结构·c++·笔记·算法
鲨莎分不晴6 小时前
强化学习第五课 —— A2C & A3C:并行化是如何杀死经验回放
网络·算法·机器学习
搞科研的小刘选手6 小时前
【ISSN/ISBN双刊号】第三届电力电子与人工智能国际学术会议(PEAI 2026)
图像处理·人工智能·算法·电力电子·学术会议
拉姆哥的小屋6 小时前
从混沌到秩序:条件扩散模型在图像转换中的哲学与技术革命
人工智能·算法·机器学习
Sammyyyyy6 小时前
DeepSeek v3.2 正式发布,对标 GPT-5
开发语言·人工智能·gpt·算法·servbay
sin_hielo7 小时前
leetcode 2110
数据结构·算法·leetcode
Jay20021117 小时前
【机器学习】33 强化学习 - 连续状态空间(DQN算法)
人工智能·算法·机器学习
panzer_maus7 小时前
归并排序的简单介绍
java·数据结构·算法