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

求逆序对

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

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

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

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

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

二分回顾

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

找极小值

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

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

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

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

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

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

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

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

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

相关文章

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

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

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

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

如何彻底卸载 Microsoft Edge?

关闭 Microsoft Edge 浏览器和所有正在运行的进程。 按下 Ctrl Shift Esc 键打开任务管理器。在任务管理器中,找到所有正在运行的 Microsoft Edge 进程。右键单击每个进程,然后选择“结束任务”。 导航至 Microsoft Edge 的安装目录。 默认情况下&…

淘宝商品详情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.…

Hero引擎:数字创意的奇迹

Hero引擎:数字创意的奇迹 大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天,让我们一同探索引擎领域的璀璨明星——Hero引擎。从游戏开发到…

安装配置Flink

安装配置Flink 1.上传安装包到Linux 2.解压到指定路径 tar -zxf ./flink-1.14.0-bin-scala_2.12.tgz /usr/local/src/3.修改环境变量 vi ~/.bashrc#往最后加入 export FLINK_HOME /usr/local/src/flink-1.14.0/ export PATH$PATH:$FLINK_HOME/bin#激活环境变量 source ~/.…

BOM简介

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

【linux】 shell 之 字符串 -z, -n 判断

-n : 字符串长度不等于 0 为真 &#xff0c;助记符 no zero&#xff0c; example : VAR11;VAR2"" ;[ -n "$VAR1" ];echo $? 为 0 true VAR11;VAR2"" ;[ -n "$VAR2" ];echo $? 为 1 false .-z : 字符串长度等于 0 为真 &#xff0…

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

文章目录 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 归…

C语言程序设计期末例题复习

题目一&#xff1a; 题目 输入两个非负整数a和b&#xff0c;输出两个非负整数的和(ab)。数据规模 0<a,b< 10 99−1样例1 输入 1 1 ​ 输出 2 ​ ​ 样例2 输入 1844674407370955161 1 ​ 输出 1844674407370955162 代码实现&#xff1a; void reverse(char *s){//反转…

【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;因此在使用的时候延…

数据库教程:从基础到进阶

数据库教程&#xff1a;从基础到进阶 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;我们将一同探索一项对于每位程序猿都至关重要的技能——“数据…

梯度提升机(Gradient Boosting Machines,GBM)

什么是机器学习 梯度提升机&#xff08;Gradient Boosting Machines&#xff0c;GBM&#xff09;是一种集成学习方法&#xff0c;通过将多个弱学习器&#xff08;通常是决策树&#xff09;组合成一个强学习器来提高模型的性能。GBM的训练过程是通过迭代&#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;才能实现…