LCR 170. 交易逆序对的总数

news/2024/12/23 18:23:24/文章来源:https://www.cnblogs.com/drunkerl/p/18624750

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

思路

方法一:嵌套 for (超时)

class Solution {public int reversePairs(int[] record) {int total = 0;for(int i = 0; i < record.length; i++) {for(int j = i + 1; j < record.length; j++){if(record[i] > record[j]){total++;}}}return total;}
}

方法二:归并排序

这里在归并的过程中统计逆序对的正确性在于:对于A(在左半部分)、B(在右半部分)两个升序数组合并的过程中,当A中的某一个元素a和B中的某一个元素b比较时,如果确定a比b大,那么A中在a之后的元素的都比b大,也就是说,A中在a之后的元素以及a和b均构成了逆序对。

class Solution {public int reversePairs(int[] record) {if (record == null || record.length < 2) {return 0;}int n = record.length;int[] temp = new int[n];return mergeSort(record, temp, 0, n - 1);}// 归并排序入口private int mergeSort(int[] record, int[] temp, int left, int right) {if (left < right) {int mid = left + (right - left) / 2;int count = mergeSort(record, temp, left, mid) + mergeSort(record, temp, mid + 1, right);count += merge(record, temp, left, mid, right);return count;} else {return 0;}}// 双指针合并两个有序数组,并计算逆序对数量private int merge(int[] record, int[] temp, int left, int mid, int right) {int count = 0;int P1 = left;int P2 = mid + 1;int k = 0;while (P1 <= mid && P2 <= right) {if (record[P1] <= record[P2]) {temp[k++] = record[P1++];} else {temp[k++] = record[P2++];count += (mid - P1 + 1); // 计算逆序对数量}}while (P1 <= mid) {temp[k++] = record[P1++];}while (P2 <= right) {temp[k++] = record[P2++];}for (int i = left; i <= right; i++) {record[i] = temp[i - left];}return count;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/857574.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VXLAN 网络中报文转发过程

以同网段的 VM 间互通简单介绍 VXLAN 网络中的报文转发过程。本文分享自天翼云开发者社区《VXLAN 网络中报文转发过程》,作者:刘****林 以同网段的 VM 间互通简单介绍 VXLAN 网络中的报文转发过程。1.VM1 发送目的地址为 VM2 的报文。 2.VTEP1 收到该报文后进行 VXLAN 封装,…

【YashanDB知识库】YMP迁移过程中报错YAS-02143或YAS-02193

本文内容来自YashanDB官网,原文内容请见 https://www.yashandb.com/newsinfo/7802944.html?templateId=1718516 【标题】YMP迁移过程中报错account lock 【关键字】YMP 迁移 account lock openssl 【问题描述】YMP所在机器的openssl版本低于1.1.1,在安装YMP及内置库时使用了…

js侧边栏菜单插件canvi

canvi.js是一款js侧边栏菜单插件。canvi.js使用简单,可以快速的制作出侧边栏展开收缩js特效。你可以在同一个页面实例化多个侧边栏实例,还可以设置侧边栏的响应式宽度,自定义侧边栏样式等。在线预览 下载使用方法 在页面中引入canvi.css和canvi.js文件。< link rel=&qu…

GitHub主页3D图表显示

效果如图,项目来源于 yoshi389111/github-profile-3d-contrib: This GitHub Action creates a GitHub contribution calendar on a 3D profile image. 1. 创建自己的github主页属性项目——跟你github用户名一致即可, 比如我github名字叫FlameskyDexive, 创建一个FlameskyDe…

E. Expression Correction

链接:https://codeforces.com/contest/2052/problem/E 题目:思路: 一道模拟。重点在于:移动每个数字;判断是否成立。 问题一:选中每个数码,枚举需要移动到的位置,使用swap函数。 问题二:格式问题+算术问题。不能有前导0,不能两个非数字相连,同时位数不能超过十位,首位和…

zabbix外部程序告警关键配置

环境: OS:Centos 7 zabbix:4.0.51.主机配置 2.用户配置 3.用户组配置 4.动作配置 5.脚本需要加上执行权限chown +x 脚本

Java项目实战之基于 Spring Boot、MyBatis 和 Vue.js 的智能停车场系统设计与技术选型

1. 系统概述 本智能停车场系统旨在为停车场提供高效、便捷的管理解决方案,涵盖车辆进出管理、车位预订、停车费用计算、用户信息管理等功能,同时提供管理员操作界面和用户移动端应用,提升停车场运营效率和用户体验。 1.1目标 实现停车场自动化管理,提高车位利用率,减少人工…

vmagent如何快速采集和转发Metrics

vmagent如何快速采集和转发Metrics本文介绍了vmagent的设计细节,参考自:vmagent-how-it-worksVictoriaMetrics agent是一个轻量级工具,用于采集不同源的指标。vmagent可以在转发指标前(通过"relabeling")定制指标(降低基数、流聚合、去重等)。第一步:通过API或抓…

SwiftUI 2024 All In One

SwiftUI 2024 All In OneSwiftUI 2024 All In OneWWDC24 SwiftUI & UI Frameworks guidehttps://developer.apple.com/news/?id=zqzlvxlm demos Design and build your apps like never before. 以前所未有的方式设计和构建您的应用程序。 With enhancements to live prev…

IGM机器人K5齿轮箱维修故障详情介绍

在长期、高强度的工作中,IGM机器人K5齿轮箱难免会出现故障,需要联系子锐机器人维修进行及时的维修和保养。 一、齿轮磨损 齿轮磨损是IGM机器人K5齿轮箱最常见的故障之一。长时间、高速运转以及负载的频繁变化都会导致齿轮表面的磨损。磨损的齿轮会降低传动效率,产生噪音,甚…

【NAS】绿联NAS+极狐Gitlab+1Panel

1. 准备域名 例如我的 ???.mllt.cc 2. 内网穿透 我使用的Natfrp(https://www.natfrp.com/tunnel/) 创建HTTP隧道(对应端口10080)创建HTTP隧道(对应端口10443) 注意这两隧道要一致,以便绑定同一个域名???.mllt.cc 然后在域名解析那里,将???.mllt.cc解析到隧道地…