当前位置: 首页 > news >正文

BM20 数组中的逆序对

描述

在这里插入图片描述
解题思路:归并排序
分治:分治即“分而治之”,“分”指的是将一个大而复杂的问题划分成多个性质相同但是规模更小的子问题,子问题继续按照这样划分,直到问题可以被轻易解决;“治”指的是将子问题单独进行处理。经过分治后的子问题,需要将解进行合并才能得到原问题的解,因此整个分治过程经常用递归来实现。

具体做法:
1、这里要借助一个辅助数组,用来暂时存储合并后的结果。然后就开始进入划分阶段,把原数组从中间分开,直到子数组长度为1。
2、使用归并排序对原数组进行排序,并且统计逆序对,在这里设置两个指针i,j分别在左右子区间上移动,此时左区间的下标i都是小于右区间的,若知道了第一个大于a[j]的数,设为a[i],则左区间中a[i]以后的所有数,都比a[j]大。故此时,在左区间中,与a[j]构成逆序对的数字个数为左边剩下的数,剩余的数=(右端-左端+1)=(mid-i+1)。这个就是逆序对的计算方法。
3、将排好序的子序列合并,同时累加逆序对。

图解:
在这里插入图片描述

代码:

import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param nums int整型一维数组 * @return int整型*/public int mod = 1000000007;public int mergeSort(int left,int right,int [] data,int[] temp){if(left>=right){return 0;}int mid = (left+right)/2;int res = mergeSort(left,mid,data,temp)+mergeSort(mid+1,right,data,temp);res %= mod;//i,j代表两个指针,分别在左右子区间上移动。int i = left,j = mid+1;for(int k=left;k<=right;k++){temp[k] = data[k]; //temp为辅助数组}for(int k=left;k<=right;k++){if(i==mid+1){  //如果左边有剩余,不太懂这处代码data[k] = temp[j++];}//如果右边有剩余,或者左边数更小else if(j==right+1||temp[i]<=temp[j]){ data[k] = temp[i++];//不太懂处代码}else{data[k] = temp[j++];//逆序对计算方法res += mid-i+1;}}return res%mod;}public int InversePairs (int[] nums) {// write code hereint n = nums.length;int [] res = new int[n];return mergeSort(0,n-1,nums,res);}
}

个人疑问:不知道有没有和我一样的小伙伴,在看这道题的解题思路会有这样的疑问:为什么可以排序呢?这里题目要求的是在一个已经列好的数组中左边的数大于右边,才被称为逆序数,而如果使用归并排序的话,这个数组不是都有序了吗,有序的基础上找逆序,不是和题目违背了吗?

经过思考,我个人的见解是这样的,这里归并排序计算逆序对的数量和暴力解法不一样,暴力解法是在一个已有的数组中,对于每一个数,都判断其他的数是否比该数大,而递归排序,它比较的不是相邻的两个数,而是相邻的两个子数组,我认为这是看懂这道题的关键,因为比较的是两个子数组,所以在两个子数组中已经排好序是没关系的,因为两个子数组的相对顺序没有变,所以如果在左区间发现了一个比右区间大的数,那么说明左区间中这个数以后的数都会比右区间大,这是递归算法计算的公式。

相关文章:

BM20 数组中的逆序对

描述 解题思路&#xff1a;归并排序 分治&#xff1a;分治即“分而治之”&#xff0c;“分”指的是将一个大而复杂的问题划分成多个性质相同但是规模更小的子问题&#xff0c;子问题继续按照这样划分&#xff0c;直到问题可以被轻易解决&#xff1b;“治”指的是将子问题单独进…...

高德猎鹰轨迹查询相关接口

高德猎鹰轨迹官网&#xff1a;服务管理-API文档-开发指南-猎鹰轨迹服务 | 高德地图API 轨迹查询 httpclient的post // post方法请求 创建轨迹 private static void createTrace() {String key "高德注册的key";String sid "服务id"; // 服务idString…...

整理总结新手开始抖音小店经营:常见问题及解决办法

抖音小店作为一种新兴的电商模式&#xff0c;在短时间内获得了广泛的关注和使用。然而&#xff0c;对于新手来说&#xff0c;抖音小店经营可能会遇到一些问题。下面是四川不若与众总结的一些常见的问题以及相应的解决办法。 问题一&#xff1a;产品选择困难 对于新手来说&#…...

4-1-netty

非阻塞io 服务端就一个线程&#xff0c;可以处理无数个连接 收到所有的连接都放到集合channelList里面 selector是有事件集合的 对server来说优先关注连接事件 遍历连接事件...

hive 动态分区-动态分区数量太多也会导致效率下降只设置非严格模式也能执行动态分区

hive 动态分区-动态分区数量太多也会导致效率下降&只设置非严格模式也能执行动态分区 结论 在非严格模式下不开启动态分区的功能的参数&#xff08;配置如下&#xff09;&#xff0c;同样也能进行动态分区数据写入&#xff0c;目测原因是不严格检查SQL中是否指定分区或者…...

java八股文面试[JVM]——JVM调优

知识来源&#xff1a; 【2023年面试】JVM性能调优实战_哔哩哔哩_bilibili...

FairyGUI-Unity 异形屏适配

本文中会修改到FairyGUI源代码&#xff0c;涉及两个文件Stage和StageCamera&#xff0c;需要对Unity的屏幕类了解。 在网上查找有很多的异形屏适配操作&#xff0c;但对于FairyGUI相关的描述操作很少&#xff0c;这里我贴出一下自己在实际应用中的异形屏UI适配操作。 原理 获…...

Oracle监听器启动出错:本地计算机上的OracleOraDb11g_home1TNSListener服务启动后又停止了解决方案

在启动oracle的服务OracleOraDb11g_home1TNSListener时&#xff0c;提示服务启动后又停止了。 解决方法&#xff1a; 修改oracle安装目录下的两个配置文件&#xff1a; 以上两个文件&#xff0c;对应的HOST的值&#xff0c;都改为127.0.0.1 然后再启动服务&#xff0c;启动成…...

Spring复习:(58)<context:annotation-config/>的作用

引入如下的BeanPostProcessor • ConfigurationClassPostProcessor • AutowiredAnnotationBeanPostProcessor • CommonAnnotationBeanPostProcessor • PersistenceAnnotationBeanPostProcessor • EventListenerMethodProcessor如果xml文件配置了bean中使用了Autowired注解…...

“东方杯”英特尔oneAPI黑客松大赛—参赛经验分享

目录 前言1、大赛要求2、oneMKL介绍3、准备 oneMKL基本使用1、下载&#xff1a;2、安装&#xff1a;3、初始化oneMKL环境&#xff1a;4、编译代码5、运行 所需的头文件使用oneMKL工具生成随机数使用fftw3计算FFT调用oneMKL API加速计算FFT对比两种方法的准确性输出结果结束语 前…...

win10家庭版远程桌面补丁_rdp wrapper

RDP Wrapper Library 就是可以帮你在 Windows 7、Windows 8、Windows 10 家庭版中打开远程桌面的工具。 1、把电脑上打开的安全软件与杀毒软件都关掉&#xff0c;因为这个远程桌面补丁会修改系统文件&#xff0c;所以安全软件可能会拦截。 2、下载RDP Wrapper Library补丁压缩…...

【C++设计模式】开放-封闭原则

2023年8月27日&#xff0c;周日下午 我觉得我的这篇博客还是写得很不错的&#xff0c;哈哈哈。 目录 概述举例说明用开放-封闭原则重构 概述 开放-封闭原则&#xff08;Open-Closed Principle&#xff0c;OCP&#xff09;是面向对象设计中的一个重要原则&#xff0c;也是许多…...

vue+file-saver+xlsx+htmlToPdf+jspdf实现本地导出PDF和Excel

页面效果如下&#xff08;echarts图表按需添加&#xff0c;以下代码中没有&#xff09; 1、安装插件 npm install xlsx --save npm install file-saver --save npm install html2canvas --save npm install jspdf --save2、main.js引入html2canvas import htmlToPdf from …...

axios 进阶

axios 进阶 接口传参方式 使用 xhr 原生技术或者是 axios 时&#xff0c;它的 post 传参方式是键值对的形式 keyvalue。但是在实际开发中一般是使用对象的形式定义数据&#xff0c;方便读取和赋值。所以当我们需要发起请求时可以通过 qs 这一款插件将对象转成键值对形式&…...

Redis限流实践:实现用户消息推送每天最多通知2次的功能

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌&#xff0c;CSDN博客专家&#xff0c;阿里云社区专家博主&#xff0c;2023年6月CSDN上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师…...

uniapp 存储base64资源为http链接图片

1. 新建一个base64.js 文件 const fsm wx.getFileSystemManager(); // base64data base64资源 // name 文件名 function base64src(base64data, name, cb) {const time new Date().getTime();const filePath ${wx.env.USER_DATA_PATH}/${name}.${time}.png;const buffer …...

列表类控件虚拟化

WPF列表控件提供的最重要的功能是UI虚拟化&#xff08;WPF编程宝典说的&#xff09;。所有的WPF列表控件&#xff08;所有继承自ItemsControl的控件&#xff0c;包括ListBox、CombBox、ListView、TreeView、DataGrid&#xff09;都支持UI虚拟化。 UI虚拟化的支持实际上没有被构…...

c# 多线程Task.Run 取消正在执行的多线程

c# 异步处理&#xff0c;上次处理没有完成&#xff0c;下次有紧接着处理多线程出错 在 C# 中进行异步处理时&#xff0c;确保处理上一个任务完成后再处理下一个任务是很重要的&#xff0c;特别是在涉及多线程的情况下。如果上一个任务尚未完成&#xff0c;而下一个任务又开始执…...

sql server 如何设置主键

开始之前 限制和局限 一个表只能包含一个 PRIMARY KEY 约束。 在 PRIMARY KEY 约束中定义的所有列都必须定义为 NOT NULL。 如果没有指定为 Null 性&#xff0c;则加入 PRIMARY KEY 约束的所有列的为 Null 性都将设置为 NOT NULL。 创建主键会自动创建相应的唯一群集索引、…...

【LeetCode-中等题】19. 删除链表的倒数第 N 个结点

文章目录 题目方法一&#xff1a;节点加入集合找索引方法二&#xff1a;直接计算长度,然后找出要删除的节点的前一个节点方法三&#xff1a;栈方法四&#xff1a;前后双指针 题目 这题的关键在与两个点 一定要设置一个哑结点&#xff0c;防止删除第一个元素时&#xff0c;导致空…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

免费数学几何作图web平台

光锐软件免费数学工具&#xff0c;maths,数学制图&#xff0c;数学作图&#xff0c;几何作图&#xff0c;几何&#xff0c;AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

C语言中提供的第三方库之哈希表实现

一. 简介 前面一篇文章简单学习了C语言中第三方库&#xff08;uthash库&#xff09;提供对哈希表的操作&#xff0c;文章如下&#xff1a; C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...

Rust 开发环境搭建

环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行&#xff1a; rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu ​ 2、Hello World fn main() { println…...

Vue ③-生命周期 || 脚手架

生命周期 思考&#xff1a;什么时候可以发送初始化渲染请求&#xff1f;&#xff08;越早越好&#xff09; 什么时候可以开始操作dom&#xff1f;&#xff08;至少dom得渲染出来&#xff09; Vue生命周期&#xff1a; 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...