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

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;
    }
};
相关推荐
石去皿32 分钟前
力扣hot100 91-100记录
算法·leetcode·职场和发展
圣保罗的大教堂2 小时前
leetcode 2799. 统计完全子数组的数目 中等
leetcode
SsummerC2 小时前
【leetcode100】组合总和Ⅳ
数据结构·python·算法·leetcode·动态规划
YuCaiH3 小时前
数组理论基础
笔记·leetcode·c·数组
2301_807611493 小时前
77. 组合
c++·算法·leetcode·深度优先·回溯
微网兔子3 小时前
伺服器用什么语言开发呢?做什么用什么?
服务器·c++·后端·游戏
YuforiaCode4 小时前
第十三届蓝桥杯 2022 C/C++组 修剪灌木
c语言·c++·蓝桥杯
YOULANSHENGMENG4 小时前
linux 下python 调用c++的动态库的方法
c++·python
CodeWithMe4 小时前
【C++】STL之deque
开发语言·c++
SsummerC4 小时前
【leetcode100】零钱兑换Ⅱ
数据结构·python·算法·leetcode·动态规划