每日一练:归并-交易逆序对的总数

LCR 170. 交易逆序对的总数 - 力扣(LeetCode)

题目要求:

在股票交易中,如果前一天的股价高于后一天的股价,则可以认为存在一个「交易逆序对」。请设计一个程序,输入一段时间内的股票交易记录 record,返回其中存在的「交易逆序对」总数。

示例 1:

复制代码
输入:record = [9, 7, 5, 4, 6]
输出:8
解释:交易中的逆序对为 (9, 7), (9, 5), (9, 4), (9, 6), (7, 5), (7, 4), (7, 6), (5, 4)。

限制:

0 <= record.length <= 50000

归并排序 O(NLogN):

把数组分成两份,先找左数组的所有逆序对,升序排序后,再找由数组的所有逆序对,升序排序后,最后找一左一右的逆序对。

假设一左一右:

存在record[cur1]>record[cur2],那么区间[cur1,mid]的元素都可以和record[cur2]构成逆序对。

cpp 复制代码
class Solution {
    vector<int> tmp; // 辅助数组
    int ret = 0;
    void _reversePairs(vector<int>& record, int sta, int end) {
        if (sta >= end)
            return;
        // 1、找中点划分数组
        int mid = sta + (end - sta) / 2;

        // 2、分别找左右两边的逆序对数
        _reversePairs(record, sta, mid);
        _reversePairs(record, mid + 1, end);

        // 3、排序两个数组+一左一右找逆序对
        int cur1 = sta, cur2 = mid + 1, i = 0;
        while (cur1 <= mid && cur2 <= end) {
            if(record[cur1]>record[cur2]){
                ret+=mid-cur1+1;
                tmp[i++]=record[cur2++];
            }else{
                tmp[i++]=record[cur1++];
            }
        }
        while(cur1 <= mid)
            tmp[i++]=record[cur1++];
        while(cur2 <= end)
            tmp[i++]=record[cur2++];

        // 4、将排序好的结果复制到record
        for(int i = sta;i <= end;i++){
            record[i]=tmp[i-sta];
        }
    }

public:
    int reversePairs(vector<int>& record) {
        tmp.resize(record.size());
        _reversePairs(record, 0, record.size() - 1);
        return ret;
    }
};
相关推荐
saltymilk3 小时前
使用 C++ 模拟 ShaderLanguage 的 swizzle
c++·模板元编程
zone77393 小时前
006:RAG 入门-面试官问你,RAG 为什么要切块?
后端·算法·面试
CoovallyAIHub6 小时前
OpenClaw 近 2000 个 Skills,为什么没有一个好用的视觉检测工具?
深度学习·算法·计算机视觉
CoovallyAIHub6 小时前
CVPR 2026 | 用一句话告诉 AI 分割什么——MedCLIPSeg 让医学图像分割不再需要海量标注
深度学习·算法·计算机视觉
CoovallyAIHub6 小时前
Claude Code 突然变成了 66 个专家?这个 5.8k Star 的开源项目,让我重新理解了什么叫"会用 AI"
深度学习·算法·计算机视觉
兆子龙6 小时前
前端哨兵模式(Sentinel Pattern):优雅实现无限滚动加载
前端·javascript·算法
xlp666hub9 小时前
Leetcode第五题:用C++解决盛最多水的容器问题
linux·c++·leetcode
CoovallyAIHub10 小时前
9个视觉语言模型工厂实测:Qwen 87.9%碾压全场,你的显卡能跑哪个?
算法
SparkX开源AI知识库11 小时前
手摸手带你安装OpenClaw并对接飞书
算法·架构
得物技术11 小时前
搜索 C++ 引擎回归能力建设:从自测到工程化准出|得物技术
c++·后端·测试