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

news2025/1/19 11:26:56

求逆序对

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

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

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

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

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

二分回顾

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

找极小值

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

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

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

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

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

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

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

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

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

相关文章

TF-IDF(Term Frequency-Inverse Document Frequency)算法详解

目录 概述 术语解释 词频(Term Frequency) 文档频率(Document Frequency) 倒排文档频率(Inverse Document Frequency) 计算(Computation) 代码语法 代码展示 安装相关包 测…

2024年甘肃省职业院校技能大赛 “信息安全管理与评估”赛项样题卷①

2024年甘肃省职业院校技能大赛 高职学生组电子与信息大类信息安全管理与评估赛项样题 第一阶段:第二阶段:模块二 网络安全事件响应、数字取证调查、应用程序安全第二阶段 网络安全事件响应第一部分 网络安全事件响应第二部分 数字取证调查第三部分 应用程…

黑马程序员JavaWeb开发|案例:tlias智能学习辅助系统(上)准备工作、部门管理

一、准备工作 1.明确需求 根据产品经理绘制的页面原型,对部门和员工进行相应的增删改查操作。 2.环境搭建 将使用相同配置的不同项目作为Module放入同一Project,以提高相同配置的复用性。 准备数据库表(dept, emp) 资料中包含…

.NET Framework 与 .NET Core 与 .NET Standard

介绍 在本文中,我们将探讨 .NET Framework、.NET Core 和 .NET Standard 之间的差异。 .NET Framework 与 .NET Core .NET框架.NET核心 历史 .NET Framework 是 .NET 的第一个实现。 .NET Core 是 .NET 的最新实现。 开源 .NET Framework 的某些组件是开源的。 .N…

CSS渐变透明

文章目录 一、前言1.1、MDN 二、实现2.1、源码2.2、线上源码 三、最后 一、前言 使用场景:在做两个元素的连接处的UI适配时,图片的颜色不能保证一定跟背景颜色或者是主色调保持一致时,会显得比较突兀。 1.1、MDN MDN的文档,点击【…

ChatGLM2-6B 大语言模型本地搭建

ChatGLM模型介绍: ChatGLM2-6B 是清华 NLP 团队于不久前发布的中英双语对话模型,它具备了强大的问答和对话功能。拥有最大32K上下文,并且在授权后可免费商用! ChatGLM2-6B的6B代表了训练参数量为60亿,同时运用了模型…

uniapp中uview组件库丰富的Table 表格的使用方法

目录 #平台差异说明 #基本使用 #兼容性 #API #Table Props #Td Props #Th Props 表格组件一般用于展示大量结构化数据的场景 #平台差异说明 AppH5微信小程序支付宝小程序百度小程序头条小程序QQ小程序√√√√√√√ #基本使用 本组件标签类似HTML的table表格&#…

【Unity】Timer计时器属性及使用

可以代替协程完成延时操作 可以不用Update进行计时 GitHub开源计时插件 网址:https://github.com/akbiggs/UnityTimer/tree/master 导入:URL:https://github.com/akbiggs/UnityTimer.git 基本功能: 创建计时器: Time…

计算机毕业设计 基于SpringBoot的项目申报系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

npm i sass -D的含义

命令 npm i sass -D 是一个在Node.js项目中使用npm(Node Package Manager)安装Sass预处理器的命令。这个命令的各个部分含义如下: npm: 这是Node Package Manager的缩写,一个用于Node.js的包管理和分发工具,允许开发者…

搭建Eureka服务注册中心

一、前言 我们在别的章节中已经详细讲解过eureka注册中心的作用,本节会简单讲解eureka作用,侧重注册中心的搭建。 Eureka作为服务注册中心可以进行服务注册和服务发现,注册在上面的服务可以到Eureka上进行服务实例的拉取,主要作用…

C++ 开发 + VSCode 调试

C 开发 VSCode 调试 MSYS2 安装 gcc、make下载安装MSMYS2pacman 添加镜像源 GCC1. 安装2. 查看结果3. 环境变量 GDB VSCode 调试所需插件创建项目调试代码1. tasks.json 配置任务2. launch.json 配置调试3. 运行 更进一步的 C/C 设置 参考资料 MSYS2 安装 gcc、make 下载 官…

CHS_01.1.5+操作系统引导

CHS_01.1.5操作系统引导 操作系统的引导一个新的磁盘安装操作系统后操作系统引导(开机过程) 操作系统的引导 我们会学习操作系统的引导 那你可能看见这个词的时候会觉得莫名其妙不明 绝地 什么是操作系统的引导呢 简单来说就是当你在开机的时候 如何让…

qt 实现登录界面

#include "mainwidget.h"MainWidget::MainWidget(QWidget *parent): QWidget(parent) {this->setWindowTitle("有道笔记");this->setWindowIcon(QIcon("C:\\Users\\18801\\Desktop\\ydIcon\\icon")); // this->setStyleSheet("…

esp32UART串口外设(Arduino)

通用异步接收器/发送器 (UART) 介绍 通用异步接收器/发送器 (UART) 是一种硬件功能,它使用广泛采用的异步串行通信接口(如 RS232、RS422 和 RS485)处理通信(即时序要求和数据成帧&…

torch.nn.CrossEntropyLoss()

torch.nn.CrossEntropyLoss(weight=None,size_average=None,ignore_index=-100,reduce=None,reduction=mean,label_smoothing=0.0) 计算过程 nn.CrossEntropyLoss()=nn.LogSoftmax()+nn.NLLLoss() import torch import torch.nn as nnloss_func = nn.CrossEntropyLoss() pre…

Windows11快速安装Android子系统

很多小伙伴想在电脑运行一下安卓程序,或则上班用手机摸鱼不方便,用电脑又没有想要的手机软件,那么怎么用电脑来安装安卓软件呢? 首先设置地区 安装Android子系统的前提需要安装 Amazon Appstore 这个应用,内地不能下载…

【CV】计算两个向量的夹角,并使用 OpenCV 可视化弧线

背景 基于人体/动物,骨骼点数据,计算关节角度 1. 原理 计算两个向量的夹角,我们已三个点为例,BA 向量和BC向量,求 B 的角度。若为四个点,延长交叉即可。 2. 效果 效果图如下 3. 核心代码 def comput…

vue2源码解析之第一步(对数据进行劫持)

###环境搭建 第一步 创建项目: npm init -y 第二步 安装对应的插件: npm i rollup rollup-plugin-babel babel/core babel/preset-env --save-dev 第三步 全局下创建rollup配置文件 rollup.config.js import babel from rollup-plug…

JVM工作原理与实战(十一):双亲委派机制

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、双亲委派机制 1.双亲委派机制详解 2.父类加载器 3.双亲委派机制的主要作用 二、双亲委派机制常见问题 总结 前言 ​JVM作为Java程序的运行环境,其负责解释和执行字…