【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);
    }
};
相关推荐
坚持编程的菜鸟3 小时前
LeetCode每日一题——困于环中的机器人
c语言·算法·leetcode·机器人
Aurorar0rua5 小时前
C Primer Plus Notes 09
java·c语言·算法
史迪奇_xxx7 小时前
10、一个简易 vector:C++ 模板与 STL
java·开发语言·c++
我不是QI8 小时前
DES 加密算法:核心组件、加解密流程与安全特性
经验分享·算法·安全·网络安全·密码学
前端小刘哥8 小时前
新版视频直播点播EasyDSS平台,让跨团队沟通高效又顺畅
算法
我是华为OD~HR~栗栗呀8 小时前
华为od-21届考研-C++面经
java·c语言·c++·python·华为od·华为·面试
oioihoii8 小时前
C++ 中的类型转换:深入理解 static_cast 与 C风格转换的本质区别
java·c语言·c++
明月(Alioo)8 小时前
机器学习入门,无监督学习之K-Means聚类算法完全指南:面向Java开发者的Python实现详解
python·算法·机器学习
叶梅树8 小时前
从零构建A股量化交易工具:基于Qlib的全栈系统指南
前端·后端·算法
小妖6669 小时前
vscode 怎么运行 c++ 文件
开发语言·c++