LCR 170. 交易逆序对的总数

解题思路:

归并排序,在归并的过程中不断计算逆序对的个数

count += mid -i + 1;的来源见下图,因为两个数组都是单调递增的,所以如果第一个数组的前一个元素大于第二个数组的对应元素,那么第一个数组的这一元素的后面的元素都会大于第二个数组的对应元素。

例如下面的例子:因为2>0,由两个数组都单调递增可知,2后面的元素都大于0,此时4个逆序对使得count增加4。

class Solution {//利用归并排序解答,在合并的时候,当左边的大于右边,就计算逆序数。//计算公式; mid-left+1//定义一个全局的计数器变量int count = 0;public int reversePairs(int[] nums) {mergeSort(nums, 0, nums.length-1);return count;}public void mergeSort(int[] nums,int left,int right){//当只有一个节点的时候,直接返回,退出递归if(left >= right){return;}int mid = (left+right)/2;//左拆分mergeSort(nums,left,mid);//右拆分mergeSort(nums,mid+1,right);//合并merge(nums,left,mid,right);}public void merge(int[] nums,int left,int mid,int right){//定义一个临时数组int[] temp = new int[right-left+1];//定义一个指针,指向临时数组的第一个元素int t = 0;//定义一个指针,指向第一个数组的第一个元素int i = left;//定义一个指针,指向第二个数组的第一个元素int j = mid+1;        //当两个数组都有元素的时候,遍历比较每个元素大小while(i <= mid && j <= right){//比较两个数组的元素,取较小的元素加入到,临时数组中//并将两个指针指向下一个元素if(nums[i] <= nums[j]){temp[t++] = nums[i++];}else{//当左边数组的大与右边数组的元素时,就对当前元素以及后面的元素的个数进行统计,//此时这个数就是,逆序数//定义一个计数器,记下每次合并中存在的逆序数。count += mid-i+1;temp[t++] = nums[j++];}}//当左边的数组没有遍历完成后,直接将剩余元素加入到临时数组中while(i <= mid)temp[t++] = nums[i++];//当右边的数组没有遍历完成后,直接将剩余元素加入到临时数组中while(j <= right)temp[t++] =nums[j++];//将新数组中的元素,覆盖nums旧数组中的元素。//此时数组的元素已经是有序的for(int k =0; k< temp.length;k++){nums[left+k] = temp[k];}}
}

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

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

相关文章

借助Aspose.SVG图像控件,在 C# 中将图像转换为 Base64

Base64 编码是一种二进制到文本的编码方案&#xff0c;可有效地将二进制数据转换为 ASCII 字符&#xff0c;为数据交换提供通用格式。在某些情况下&#xff0c;我们可能需要将JPG或PNG图像转换为 Base64 字符串数据。在这篇博文中&#xff0c;我们将学习如何在 C# 中将图像转换…

分享经典、现代和前沿软件工程课程

随着信息技术的发展&#xff0c;软件已经深入到人类社会生产和生活的各个方面。软件工程是将工程化的方法运用到软件的开发、运行和维护之中&#xff0c;以达到提高软件质量&#xff0c;降低开发成本的目的。软件工程已经成为当今最活跃、最热门的学科之一。 本次软件工程MOOC课…

模板06-普通函数与函数模板调用规则

1、如果函数模板和普通函数都可以实现&#xff0c;优先调用普通函数 2、可以通过空模板参数列表来强调调用函数模板 3、函数模板也可以发生重载 4、如果函数模板可以发生更好的匹配&#xff0c;优先调用函数模板 #include <iostream> using namespace std;int my_add …

混合云技术架构是什么样的

混合云技术架构是什么样的&#xff1f;混合云技术架构是一种将公有云和私有云相结合的云计算架构。它允许组织在私有云和公有云之间灵活地共享和迁移应用程序、数据和服务。 混合云技术架构的设计可以根据组织的需求和业务要求进行定制&#xff0c;通常包括以下组件&#xff1…

现在如何才能开通微信公众号留言功能?

为什么公众号没有留言功能&#xff1f;2018年2月12日之后直到现在&#xff0c;新注册公众号的运营者会发现一个问题&#xff1a;无论是个人还是企业的公众号&#xff0c;在后台都找不到留言功能了。这对公众号来说绝对是一个极差的体验&#xff0c;少了一个这么重要的功能&…

万村乐数字乡村系统开源代码:革命性引领,助推乡村振兴新篇章

如今&#xff0c;国际社会普遍认为信息化、数字化已是重大且不可逆转的发展趋势&#xff0c;如何让广大农村地区充分分享到这个发展带来的红利&#xff0c;从而提升农村的经济活力&#xff0c;确保村民生活质量不断优化&#xff0c;已然成为我们需要认真研究并积极解决的重大议…

Window下编写的sh文件在Linux/Docker中无法使用

Window下编写的sh文件在Linux/Docker中无法使用 一、sh文件目的1.1 初始状态1.2 目的 二、过程与异常2.1 首先获取标准ubuntu20.04 - 正常2.2 启动ubuntu20.04容器 - 正常2.3 执行windows下写的preInstall文件 - 报错 三、检查和处理3.1 评估异常3.2 处理异常3.3 调整后运行测试…

WebFlux的探索与实战 - r2dbc的多表查询

前言 在一个有数据库的项目中&#xff0c;条件查询与多表查询总是同幽灵般如影随形。 好久不见朋友们&#xff0c;我是forte。 本篇文章会以我的 个人经验 来介绍下如何在 Spring WebFlux 中使用 Spring Data R2DBC 进行多表查询。 这次我会以一个自己写的项目作为基础来为各…

[课程]yolov9目标检测封装成类调用

搞定系列&#xff1a;yolov9目标检测封装成类调用 课程地址&#xff1a;https://edu.csdn.net/course/detail/39352 课程介绍课程目录讨论留言 你将收获 学会yolov9封装基本技巧和大体思路 学会yolov9封装类的API调用技巧和自由扩展 学会使用Pycharm调试技巧和运行脚本技…

「连载」边缘计算(二十四)03-04:边缘部分源码(源码分析篇)

&#xff08;接上篇&#xff09; 在Register()函数中对EdgeHub struct的初始化只是对EdgeHub struct中的controller进行初始化。controller的初始化函数具体如下所示。 KubeEdge/edge/pkg/edgehub/controller.go //NewEdgeHubController creates and returns a EdgeHubContro…

uniapp+vue基于Android的图书馆借阅系统qb4y3-nodejs-php-pyton

uni-app框架&#xff1a;使用Vue.js开发跨平台应用的前端框架&#xff0c;编写一套代码&#xff0c;可编译到Android、小程序等平台。 框架支持:springboot/django/php/Ssm/flask/express均支持 前端开发:vue 语言&#xff1a;pythonjavanode.jsphp均支持 运行软件:idea/eclip…

2023天津公租房网上登记流程图,注册到信息填写

2023年天津市公共租赁住房网上登记流程图 小编为大家整理了天津市公共租赁住房网上登记流程&#xff0c;从登记到填写信息。 想要体验的朋友请看一下。 申请天津公共租赁住房时拒绝申报家庭情况会怎样&#xff1f; 天津市住房保障家庭在享受住房保障期间&#xff0c;如在应申…

智慧草莓基地:Java与SpringBoot的技术革新

✍✍计算机毕业编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java、…

xss.haozi:0x00

0x00没有什么过滤所以怎么写都没有关系有很多解 <script>alert(1)</script>

【Linux取经路】文件系统——inode与软硬链接

文章目录 一、前言二、认识硬件——磁盘2.1 磁盘的存储构成2.2 磁盘的逻辑抽象 三、操作系统对磁盘的使用3.1 再来理解创建文件3.2 再来理解删除文件3.3 再来理解目录 四、硬链接五、软链接六、结语 一、前言 在之前的【Linux取经路】文件系统之被打开的文件——文件描述符的引…

DevStack 基于 Ubuntu 部署 OpenStack

Devstack 简介 DevStack 是一系列可扩展的脚本&#xff0c;用于基于 git master 的最新版本快速调出完整的 OpenStack 环境。devstack 以交互方式用作开发环境和 OpenStack 项目大部分功能测试的基础。 devstack 透过执行 stack.sh 脚本&#xff0c;搭建 openstack 环境&…

AcWing 799. 最长连续不重复子序列

Problem: AcWing 799. 最长连续不重复子序列 文章目录 思路解题方法复杂度Code 思路 这是一个求最长连续不重复子序列的问题。我们可以使用双指针&#xff08;滑动窗口&#xff09;的方法来解决。我们维护一个窗口&#xff0c;并使用一个数组来记录窗口内元素的出现次数。当窗口…

深度学习的一个完整过程通常包括以下几个步骤

深度学习的一个完整过程通常包括以下几个步骤&#xff1a; 问题定义和数据收集&#xff1a; 定义清晰的问题&#xff0c;明确任务的类型&#xff08;分类、回归、聚类等&#xff09;以及预期的输出。收集和整理用于训练和评估模型的数据集。确保数据集的质量&#xff0c;进行预…

车联网产品与应用

在中国&#xff0c;先是小鹏汽车官宣“智驾覆盖城市数量、可用里程以及用户口碑均为行业第一”。后有华为问界官宣OTA&#xff0c;领航功能全国可用路段高达99%&#xff0c;“全国都能用&#xff0c;哪哪都能开”。 似乎分分钟&#xff0c;“自动驾驶”就要干成了。但日新月异的…

Day31|贪心算法1

贪心的本质是选择每一阶段的局部最优&#xff0c;从而达到全局最优。 无固定套路&#xff0c;举不出反例&#xff0c;就可以试试贪心。 一般解题步骤&#xff1a; 1.将问题分解成若干子问题 2.找出适合的贪心策略 3.求解每一个子问题的最优解 4.将局部最优解堆叠成全局最…