码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 从零学算法(LCR 170)


    在股票交易中,如果前一天的股价高于后一天的股价,则可以认为存在一个「交易逆序对」。请设计一个程序,输入一段时间内的股票交易记录 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)。

    • 第一反应肯定暴力解法 n 重循环了,那就算了。逆序对这个概念,其实你好好想想,和归并排序真的有很大的关联。同样分为前后部分,然后前后两部分做处理。也就是说,在归并排序合并左右数组的过程中,其实就会产生若干逆序对(左数组元素相对右数组元素,每一组都是逆序对),那还说什么,排序的归并过程其实就能统计逆序对,即排序完毕则统计完毕(归并排序可以参考我之前的学习笔记)。
    •   int[] record, tmp;
        public int reversePairs(int[] record) {
            this.record = record;
            tmp = new int[record.length];
            return mergeSort(0, record.length - 1);
        }
        private int mergeSort(int l, int r) {
            // 终止条件
            if (l >= r) return 0;
            // 递归划分,m 其实就是左数组右边界
            int m = (l + r) / 2;
            // 合并统计结果
            int res = mergeSort(l, m) + mergeSort(m + 1, r);
            // 合并阶段
            int i = l, j = m + 1;
            for (int k = l; k <= r; k++)
                tmp[k] = record[k];
            for (int k = l; k <= r; k++) {
            	// 如果左数组合并完了就直接用右数组
                if (i == m + 1)
                    record[k] = tmp[j++];
                // 如果右数组用完了,或者左数组当前数更小(升序排序,所以取更小的)
                // 就取左数组的数
                else if (j == r + 1 || tmp[i] <= tmp[j])
                    record[k] = tmp[i++];
                else {
                    record[k] = tmp[j++];
                    // 统计逆序对,此时说明左右数组都有数,并且左数组当前数大于右数组当前数
                    // 左数组也是升序的,即之后的数也都大于右数组当前数,
                    // 所以左数组当前范围比如为 [2,4]
                    // 逆序对数量就是 4-2+1 有三个数
                    res += m - i + 1; 
                }
            }
            return res;
        }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36
  • 相关阅读:
    Access2007中如何运行SQL执行SQl语句
    Sound Siphon for Mac:音频处理与录制工具
    用幻灯片讲解C++中的C语言风格数组
    SQL之增删改查命令操作详解
    java酒店管理系统设计与实现计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
    Opencv项目实战:07 人脸识别和考勤系统
    Python爬取豆瓣电影+数据可视化,爬虫教程!
    CDR插件开发之Addon插件005 - Corel.Interop.VGCore.dll库文件简介
    剑指 Offer II 024. 反转链表
    十九、【减淡工具组】
  • 原文地址:https://blog.csdn.net/m0_53256503/article/details/134013652
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号