【LCR 170. 交易逆序对的总数】

目录

一、题目描述

二、算法原理

三、代码实现

3.1升序:

cpp 复制代码
class Solution 
{
public:

    int mergeSort(vector<int>& nums, int left, int right)
    {
        if (left >= right)
        {
            return 0;
        }
        int mid = left + (right - left) / 2, ret = 0;
        ret += mergeSort(nums, left, mid);
        ret += mergeSort(nums, mid + 1, right);

        //求一左一右
        vector<int> temp(right - left + 1);
        int cur1 = left, cur2 = mid + 1, i = 0;
        while (cur1 <= mid && cur2 <= right)
        {
            if (nums[cur1] <= nums[cur2])
            {
                temp[i++] = nums[cur1++];
            }
            else
            {
                ret += (mid - cur1 + 1);
                temp[i++] = nums[cur2++];       
            }
        }

        while (cur1 <= mid) temp[i++] = nums[cur1++];
        while (cur2 <= right) temp[i++] = nums[cur2++];
        for (int i = left; i <= right; i++)
        {
            nums[i] = temp[i - left];
        }
        return ret;
    }



    int reversePairs(vector<int>& record) 
    {
        return mergeSort(record,0,record.size()-1);
    }
};

3.2降序:

cpp 复制代码
class Solution 
{
public:

    int mergeSort(vector<int>& nums, int left, int right)
    {
        if (left >= right)
        {
            return 0;
        }
        int mid = left + (right - left) / 2, ret = 0;
        ret += mergeSort(nums, left, mid);
        ret += mergeSort(nums, mid + 1, right);

        //求一左一右
        vector<int> temp(right - left + 1);
        int cur1 = left, cur2 = mid + 1, i = 0;
        while (cur1 <= mid && cur2 <= right)
        {
            if (nums[cur1] <= nums[cur2])
            {
                temp[i++] = nums[cur2++];
            }
            else
            {
                ret += (right-cur2+1);
                temp[i++] = nums[cur1++];       
            }
        }

        while (cur1 <= mid) temp[i++] = nums[cur1++];
        while (cur2 <= right) temp[i++] = nums[cur2++];
        for (int i = left; i <= right; i++)
        {
            nums[i] = temp[i - left];
        }
        return ret;
    }



    int reversePairs(vector<int>& record) 
    {
        return mergeSort(record,0,record.size()-1);
    }
};
相关推荐
JCBP_几秒前
QT(4)
开发语言·汇编·c++·qt·算法
码熔burning4 分钟前
JVM 垃圾收集算法详解!
jvm·算法
小柴狗26 分钟前
C语言关键字详解:static、const、volatile
算法
会开花的二叉树27 分钟前
继承与组合:C++面向对象的核心
java·开发语言·c++
潮汐退涨月冷风霜1 小时前
数字图像处理(1)OpenCV C++ & Opencv Python显示图像和视频
c++·python·opencv
第七序章2 小时前
【C++STL】list的详细用法和底层实现
c语言·c++·自然语言处理·list
仙俊红2 小时前
LeetCode每日一题,20250914
算法·leetcode·职场和发展
逆小舟4 小时前
【Linux】人事档案——用户及组管理
linux·c++
风中的微尘9 小时前
39.网络流入门
开发语言·网络·c++·算法
混分巨兽龙某某10 小时前
基于Qt Creator的Serial Port串口调试助手项目(代码开源)
c++·qt creator·串口助手·serial port