【归并】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;
    }
};
相关推荐
草莓熊Lotso20 小时前
《算法闯关指南:优选算法--模拟》--41.Z 字形变换,42.外观数列
开发语言·c++·算法
啊吧怪不啊吧20 小时前
算法王冠上的明珠——动态规划之斐波那契数列问题
大数据·算法·动态规划
无敌最俊朗@1 天前
力扣hot100-206反转链表
算法·leetcode·链表
Kuo-Teng1 天前
LeetCode 279: Perfect Squares
java·数据结构·算法·leetcode·职场和发展
王哈哈^_^1 天前
YOLO11实例分割训练任务——从构建数据集到训练的完整教程
人工智能·深度学习·算法·yolo·目标检测·机器学习·计算机视觉
檐下翻书1731 天前
从入门到精通:流程图制作学习路径规划
论文阅读·人工智能·学习·算法·流程图·论文笔记
CoderYanger1 天前
B.双指针——3194. 最小元素和最大元素的最小平均值
java·开发语言·数据结构·算法·leetcode·职场和发展·1024程序员节
小曹要微笑1 天前
STM32各系列时钟树详解
c语言·stm32·单片机·嵌入式硬件·算法
前进的李工1 天前
LeetCode hot100:094 二叉树的中序遍历:从递归到迭代的完整指南
python·算法·leetcode·链表·二叉树
麦麦大数据1 天前
F049 知识图谱双算法推荐在线学习系统vue+flask+neo4j之BS架构开题论文全源码
学习·算法·知识图谱·推荐算法·开题报告·学习系统·计算机毕业设计展示