2023.10.13 求逆序对,二分,求极小值

求逆序对

划分归并对数组进行调整的合理性在于

每次划分数组后,在前面数组的元素与后面数组元素相对次序不会颠覆,就是前面元素在前面划分出的数组里随便调整,也依然在后面数组的任意元素里的前面,而不可能调整到后面数组的任意元素里的后面,所以在调整时,即使影响,也只是会影响前面数组里的逆序对数,而不会影响前面数组里的某个元素和后面数组里任意元素组成逆序对

所以递归归并思路就是,先划分数组,目的就是最后返回出这两个前后数组里的元素所能组成的逆序对数,即只考虑的是两个数组之间组成的逆序对数,而没有考虑数组内元素组成的逆序对数

因为要不断递归,数组内的元素组成的对数在底层递归时已求解出,而且保证到上层时,每个数组都是处于已排好序的状态

找前后数组的逆序对数,就用两个指针指头元素,如果前数组的头元素比后元素大,就不断出后数组的元素,直到不再大于前元素;前元素的首个元素大于,那么前数组里的剩下所有元素都比后面的首个元素大,即前面的剩的数量*从开始小于,到后面首个比前面头元素大的之间的数量,最后终点就是其中一个取完

二分回顾

二分查找可以找到数组元素中的极大值或极小值,也可以找到有序数组中的特定值

找极小值

担心的是,如果中间元素的右边比中间元素小,就会使左指针右移到中指针处,但是如果最小元素是在左区间里,就会出问题 

确实会出问题,所以二分的应用场景是有序的,由于是旋转数组,所以序列里至多存在两个有序列,只有相邻处无单调性

如果中指针比右指针大,只能说明右指针在小序列里,中指针在大序列里,最小值就在这俩区间内,让左指针右移到中指针处

如果中指针比右指针小,由于有序,说明中指针到右指针的区间内一直单调,即位于同一区间内,可能是大的也可能是小的,但最小值一定不在其中,但可能在左端点,所以让右指针左移到中指针,找另一半区间

如果中指针和右指针相等,可能的情况有两种;一种是小序列和大序列里都有这个元素,然后指针都指在这个元素上,这种情况下,最小数字在区间内;另一种是这俩相等元素之间就在一个序列里,那也不能确定这个元素是不是所要的最小元素

这里的策略就是让右指针往左移一位(因为右指针初始在最右侧),这样可以使下次的中指针发生变动,且是往左偏,如果是第一种情况,首先可以确定是大序列在前,小序列在后,那么中指针左移一下,由于两个序列都有这个元素,而且原序列是单调的,就说明大序列之前的元素都是这个元素,小序列之后的元素也都是这个元素。右指针在小序列里,中指针在大序列里,调整后中指针依然在大序列里,如果一直相同,就会使右指针不断左移,直到右指针在小序列里可能遇到第一个相异的元素,就会使中指针大于右指针

如果是后一种情况,中指针只可能在于小序列,如果中指针在大序列,那么说明左指针,右指针均在大序列里,则最小值只会在左端点;中指针位于小序列,右指针左移,会使中指针到大序列,就会使下一次中指针大于右指针

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

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

相关文章

基于模块自定义扩展字段的后端逻辑实现(一)

目录 一:背景介绍 二:实现过程 三:字段标准化 四:数据存储 五:数据扩展 六:表的设计 一:背景介绍 最近要做一个系统,里面涉及一个模块是使用拖拉拽的形式配置模块使用的字段表…

Android Studio导入项目 下载gradle很慢或连接超时,提示:Read timed out---解决方法建议收藏!

目录 前言 一、报错信息 二、解决方法 三、更多资源 前言 一般来说,使用Android Studio导入项目并下载gradle的过程应该是相对顺利的,但是有时候会遇到下载速度缓慢或连接超时的问题,这可能会让开发者感到头疼。这种情况通常会出现在网络…

淘宝商品详情API:电商数据的宝藏之源

在当今的电商时代,数据已经成为企业和商家最宝贵的资产之一。通过数据,商家可以更好地了解市场需求、消费者行为以及竞品情况,从而制定更加精准的营销策略和优化运营。而淘宝商品详情API(taobao.item_get)作为淘宝平台…

c++学习:异常处理机制

c语言的错误处理方式 返回值 return 0; 全局错误标志 int test() {int fd open ("1.txt",O_RDONLY);if(fd -1){//open打开文件错误会返回错误码 errnoperror()://或者用strerror可以打印出错误return -1;}return 0; } 缺点 当函数有多级嵌套的时候,…

Python综合数据分析_RFM用户分组模型

文章目录 1.导入数据2.月度订单数据可视化3.数据清洗4.特征工程5.构建User用户表6.求R值7.求F值8.求M值9.显示R、F、M值的分布情况10.显示手肘图辅助确定K值11.创建和训练模型12.给R值聚类13.给聚类后的层级排序14.继续给F、M值聚类,并排序15.为用户整体分组画像 1.…

BOM简介

1.1 常用的键盘事件 1.1.1 键盘事件 键盘事件触发条件onkeydown按键被按下时触发onkeypress按键被按下时触发onkeyup按键被松开时触发 注意&#xff1a;addEventListener事件不需要加on <script>//1. keydown 按键按下的时候触发,按任意键都触发&#xff0c;也可以识…

大创项目推荐 深度学习实现语义分割算法系统 - 机器视觉

文章目录 1 前言2 概念介绍2.1 什么是图像语义分割 3 条件随机场的深度学习模型3\. 1 多尺度特征融合 4 语义分割开发过程4.1 建立4.2 下载CamVid数据集4.3 加载CamVid图像4.4 加载CamVid像素标签图像 5 PyTorch 实现语义分割5.1 数据集准备5.2 训练基准模型5.3 损失函数5.4 归…

【Kubernetes】如何使用 kubectl 操作 cluster、node、namespace、pod

如何使用 kubectl 操作 cluster、node、namespace、pod 在列出、描述、修改或删除其他命名空间中的对象时&#xff0c;需要给 kubectl 命令传递 --namespace&#xff08;或 -n&#xff09;选项。如果不指定命名空间&#xff0c;kubectl 将在当前上下文中配置的默认命名空间中执…

整理的Binder、DMS、Handler、PMS、WMS等流程图

AMS&#xff1a; Binder&#xff1a; Handler&#xff1a; PMS&#xff1a; starActivity&#xff1a; WMS&#xff1a; 系统启动&#xff1a;

1884_emacs ivy minibuffer中上下行导航快捷键修改

全部学习汇总&#xff1a; GitHub - GreyZhang/editors_skills: Summary for some common editor skills I used. 我自己凑了一组emacs的配置使用了很长一段时间&#xff0c;很大程度上的功能在模仿spacemacs&#xff0c;但是我的配置更加轻量化&#xff0c;因此在使用的时候延…

设备树在开发板的系统中的体现

一. 简介 设备树文件中的设备节点&#xff0c;可以在开发板系统中看到。 也就说&#xff0c;开发板加载设备树文件&#xff0c;Linux内核启动系统以后&#xff0c;可以在根文件系统里看到设备树的节点信息。在/proc/device-tree/目录下存放着设备树信息。 二. 设备树在开发板…

数据结构单链表定义及例题(上)

本文简要的介绍了单链表的定义,以及单链表的头插法和尾插法的实现 文章目录 一、单链表数据结构的定义 二、头插法建立单链表(带头节点) 三、尾插法建立单链表(带头节点) 四、打印单链表 五、测试及全部代码 总结 前言 单链表是学习,以及考研无论是408还是自命题都是很重…

序列模型(4)—— Scaling Laws

本文介绍 LLM 训练过程中重要的 Scaling Laws&#xff0c;这是一个经验规律&#xff0c;指出了固定训练成本&#xff08;总计算量FLOPs&#xff09; C C C 时&#xff0c;如何调配模型规模&#xff08;参数量&#xff09; N N N 和训练 Token 数据量 D D D&#xff0c;才能实现…

Spring中Bean的生命周期

第一、Bean的生命周期 Spring中Bean的生命周期就是Bean在Spring中从创建到销毁的整个过程&#xff0c;主要分为以下5个部分&#xff1a; 1.实例化&#xff1a; 给Bean分配内存空间&#xff08;对应JVM中的“加载”&#xff0c;这里只是分配了内存&#xff09;&#xff1b; 2.设…

ffmpeg[学习(四)](代码实现) 实现音频数据解码并且用SDL播放

0、作者杂谈 CSDN大多数都是落后的&#xff0c;要么是到处复制粘贴的&#xff0c;对于初学者我来说困惑了很久&#xff0c;大多数CSDN文章都是使用旧的API &#xff0c;已经被否决了&#xff0c;于是我读一些官方文档&#xff0c;和一些开源项目音视频的输出过程&#xff0c;写…

开源的RNA-Seq分析软件Trinity的详细介绍和使用方法

介绍 GitHub - trinityrnaseq/trinityrnaseq: Trinity RNA-Seq de novo transcriptome assembly Trinity是一种开源的RNA-Seq分析软件&#xff0c;用于转录组的de novo组装。转录组de novo组装是通过将RNA-Seq数据中的短序列片段&#xff08;reads&#xff09;重新组装成完整的…

模型容器与AlexNet构建

一、模型容器——Containers nn.Sequential 是 nn.module的容器&#xff0c;用于按顺序包装一组网络层 Sequential 容器 nn.Sequential 是 nn.module的容器&#xff0c;用于按顺序包装一组网络层 • 顺序性&#xff1a;各网络层之间严格按照顺序构建 • 自带forward()&#xf…

x-cmd pkg | grex - 用于生成正则表达的命令行工具

目录 简介首次用户生成的正则表达式与 perl 和 rust 兼容支持 Unicode 符号友好的用户体验进一步阅读 简介 grex 是一个旨在简化创作正则表达式的复杂且繁琐任务的库和命令行程序。这个项目最初是 Devon Govett 编写的 JavaScript 工具 regexgen 的 Rust 移植。但 regexgen 在…

AArch64 Exception Model学习

提示 该博客主要为个人学习&#xff0c;通过阅读官网手册整理而来&#xff08;个人觉得阅读官网的英文文档非常有助于理解各个IP特性&#xff09;。若有不对之处请参考参考文档&#xff0c;以官网文档为准。 1 Privilege and Exception Levels 1.1 为什么要划分权限&#xf…

MySQL基础笔记(3)DML数据操作语句

顾名思义&#xff0c;全称是数据操作语言&#xff0c;用来对数据库中表的数据记录进行增删改操作~ 目录 一.添加数据 1.给指定字段添加数据 2.给全部字段添加数据 3.批量添加数据 二.修改数据 三.删除数据 一.添加数据 1.给指定字段添加数据 insert into 表名 (字段名…