【优选算法】Binary-Blade:二分查找的算法刃(下)
文章目录
- 1.山脉数组的峰顶索引
- 2.寻找峰值
- 3.寻找旋转排序数组中的最小值
- 4.点名
- 希望读者们多多三连支持
- 小编会继续更新
- 你们的鼓励就是我前进的动力!
本篇接上一篇二分查找,主要通过部分题目熟悉二分查找的进阶使用,重点强调二段性,找到两个区间不同的地方在哪,多画图划分界限
1.山脉数组的峰顶索引
✏️题目描述:

✏️示例:

传送门:山脉数组的峰顶索引
题解:
💻第一步:
首先确定二段性,把顶峰放到左区间还是右区间取决于你自己,会根据取法不同而导致代码不同,但是都能求出顶峰索引,这里我们放到左区间

💻第二步:
按照我们的划分方式,要确保左边区间不会越过分界,右边区间同理,就要用mid和mid-1这种划分方式。如果在左区间,那么mid会有等于峰顶索引,即left = mid;如果在右区间,mid及其后面的值都不可能是峰顶索引,即right = mid - 1

💻细节问题:
对于二分查找进阶模版,如果在if语句的函数体里有减法操作时,那么计算mid的公式就要+1
💻代码实现:
#include <iostream>
#include <vector>
using namespace std;class Solution
{
public:int peakIndexInMountainArray(vector<int>& arr) {int left = 0, right = arr.size() - 1;while (left < right){int mid = left + (right - left + 1) / 2;if (arr[mid] > arr[mid - 1]){left = mid;}else{right = mid - 1;}}return right;}
};
2.寻找峰值
✏️题目描述:

✏️示例:

传送门:寻找峰值
题解:
💻第一步:
首先确定二段性,可以分为在上坡或者下坡,其实这道题和山脉数组的峰顶索引是一样的,这里我们顶峰放在右区间里

💻第二步:
按照我们的划分方式,要确保右边区间不会越过分界,左边区间同理,就要用mid和mid+1这种划分方式。如果在右区间,那么mid会有等于峰顶索引,即right = mid;如果在左区间,mid及其前面的值都不可能是峰顶索引,即left = mid + 1

💻代码实现:
#include <iostream>
#include <vector>
using namespace std;class Solution
{
public:int findPeakElement(vector<int>& nums) {int left = 0, right = nums.size() - 1;while (left < right){int mid = left + (right - left) / 2;if (nums[mid] < nums[mid + 1]){left = mid + 1;}else{right = mid;}}return left;}
};
3.寻找旋转排序数组中的最小值
✏️题目描述:

✏️示例:

传送门:寻找旋转排序数组中的最小值
题解:
💻第一步:
根据画图,似乎不太好确认二段性,但我们可以发现以D点为分界点,左区间的数(A到B)都大于D,右区间的数(C到D)都小于D,那么由此就能确定二段性,不断向中寻找最小的数

💻第二步:
如果在右区间,那么mid会有等于最小值,即right = mid;如果在左区间,mid及其前面的值都不可能是最小值,即left = mid + 1

💻代码实现:
#include <iostream>
#include <vector>
using namespace std;class Solution
{
public:int findMin(vector<int>& nums) {int left = 0, right = nums.size() - 1;int x = nums[right];while (left < right){int mid = left + (right - left) / 2;if (nums[mid] > x){left = mid + 1;}else{right = mid;}}return nums[right];}
};
4.点名
✏️题目描述:

✏️示例:

传送门:点名
题解:
💻第一步:
在连续数组的前提下,缺失数字的位置开始下标与实际值不同,很明显二段性立马就出来了

💻第二步:
如果在右区间,那么mid会有等于缺失值的实际位置索引,即right = mid;如果在左区间,mid及其前面的值都不可能是缺失值的实际位置索引,即left = mid + 1

💻代码实现:
#include <iostream>
#include <vector>
using namespace std;class Solution
{
public:int takeAttendance(vector<int>& records) {int left = 0, right = records.size() - 1;while (left < right){int mid = left + (right - left) / 2;if (records[mid] == mid){left = mid + 1;}else{right = mid;}}return records[left] == left ? left + 1 : left;}
};
希望读者们多多三连支持
小编会继续更新
你们的鼓励就是我前进的动力!

相关文章:
【优选算法】Binary-Blade:二分查找的算法刃(下)
文章目录 1.山脉数组的峰顶索引2.寻找峰值3.寻找旋转排序数组中的最小值4.点名希望读者们多多三连支持小编会继续更新你们的鼓励就是我前进的动力! 本篇接上一篇二分查找,主要通过部分题目熟悉二分查找的进阶使用,重点强调二段性,…...
Improving Language Understanding by Generative Pre-Training GPT-1详细讲解
Improving Language Understanding by Generative Pre-Training 2018.06 GPT-1 0.有监督、半监督、无监督 CV:ImageNet pre-trained model NLP:pre-trained model? 在计算机视觉中任务包含分类、检测、分割,任务类别数少,对应…...
分治算法——优选算法
本章我们要学习的是分治算法,顾名思义就是分而治之,把大问题分为多个相同的子问题进行处理,其中我们熟知的快速排序和归并排序用的就是分治算法,所以我们需要重新回顾一下这两个排序。 一、快速排序(三路划分…...
EtherCAT转Modbus网关与TwinCAT3的连接及配置详述
在工业自动化控制系统中,常常需要整合不同的通信协议设备。本案例旨在展示如何利用捷米特JM-ECT-RTU协议转换网关模块,实现 EtherCAT 网络与 Modbus 设备之间的无缝连接,并在 TwinCAT3 环境中进行有效配置,以构建一个稳定可靠的自…...
Apache Hadoop YARN框架概述
一、YARN产生和发展简史 1.1背景 数据、程序、运算资源(内存、CPU)三者组在一起,才能完成数据的计算处理过程。在单机环境下,三者之间协调配合不是太大问题。为了应对海量数据的处理场景,Hadoop软件出现并提供了分布…...
三甲医院等级评审八维数据分析应用(八)--数据治理的持续改进与反馈机制篇
一、引言 1.1 研究背景与意义 当前三甲医院在数据管理方面暴露出诸多棘手问题。一方面,数据治理缺乏系统性与规范性,数据标准不统一,不同科室、信息系统之间的数据格式各异、编码混乱,导致数据整合与共享困难重重,严重制约了数据分析的准确性与深度。以某三甲医院为例,…...
XML通过HTTP POST 请求发送到指定的 API 地址,进行数据回传
代码结构说明 这段代码的主要功能是: 从指定文件夹中读取所有 XML 文件。 将每个 XML 文件的内容通过 HTTP POST 请求发送到指定的 API 地址。 处理服务器的响应,并记录每个文件的处理结果。 using System; using System.IO; using System.Net; usin…...
科大讯飞前端面试题及参考答案 (下)
除了 echarts 还了解其它画图工具吗? 除了 Echarts,还有不少优秀的画图工具可供选择使用。 Highcharts:它是一款功能强大且应用广泛的图表绘制工具,支持多种常见的图表类型,像柱状图、折线图、饼图、散点图等,同时也能创建较为复杂的图表,比如仪表盘图表、极坐标图等。H…...
【理论】测试框架体系TDD、BDD、ATDD、DDT介绍
一、测试框架是什么 测试框架是一组用于创建和设计测试用例的指南或规则。框架由旨在帮助 QA 专业人员更有效地测试的实践和工具的组合组成。 这些指南可能包括编码标准、测试数据处理方法、对象存储库、存储测试结果的过程或有关如何访问外部资源的信息。 A testing framewo…...
如何进行全脑思维(左脑,右脑,全脑)
1)每人都有一个价值100万美元的点子 . 谁能帮助实施这个点子? . 实施这个点子需要哪些资源? . 推行这个点子需要得到哪些许可? . 是否有实施这个点子的最佳时间? . 作为实施的开始,最简单的做法是什么? 2) 进行理性的、逻辑的、量的思维那一半,而排除了大脑的…...
领域驱动设计 2
1.幂等设计 1.1.定义 无论进行多少次相同的操作,结果都保持一致的设计。 1.2.写操作的幂等性 1.2.1.Insert 指定唯一标识写,是具有幂等性的。 不指定唯一标识写,不具备幂等性。 1.2.2.Update 如果更新操作依赖于与历史状态,…...
十年后LabVIEW编程知识是否会过时?
在考虑LabVIEW编程知识在未来十年内的有效性时,我们可以从几个角度进行分析: 1. 技术发展与软件更新 随着技术的快速发展,许多编程工具和平台不断更新和改进,LabVIEW也不例外。十年后,可能会有新的编程语言或平台…...
ARM交叉编译Boost库
Boost下载:点击跳转 编译过程: 生成project-config.jam ./bootstrap.sh --with-librariesfilesystem,thread --with-toolsetgcc 2. 修改project-config.jam(位于第12行附近) if ! gcc in [ feature.values <toolset> ] …...
uniapp:钉钉小程序需要录音权限及调用录音
{// ... 其他配置项"mp-dingtalk": {"permission": {"scope.userLocation" : {"desc" : "系统希望获得您的定位用于确认您周围的设施数据"},"scope.bluetooth" : {"desc" : "你的蓝牙权限将用于小…...
Swin Transformer模型详解(附pytorch实现)
写在前面 Swin Transformer(Shifted Window Transformer)是一种新颖的视觉Transformer模型,在2021年由微软亚洲研究院提出。这一模型提出了一种基于局部窗口的自注意力机制,显著改善了Vision Transformer(ViT…...
gitee 使用教程
前言 Gitee 是一个中国的开源代码托管平台,类似于 GitHub,旨在为开发者提供一个高效、稳定、安全的代码管理和协作开发环境。Gitee 支持 Git 协议,可以托管 Git 仓库,进行版本控制、代码协作、项目管理等操作。 1. Gitee 的主要…...
基于YOLOv8的水下目标检测系统
基于YOLOv8的水下目标检测系统 (价格90) 使用的是DUO水下目标检测数据集 训练集 6671张 验证集 1111张 测试集 1111张 包含 [holothurian, echinus, scallop, starfish] [海参, 海胆, 扇贝, 海星] 4个类 通过PYQT构建UI界面,包含图片检测,视…...
浅析PCIe链路均衡技术原理与演进
在现代计算机硬件体系的持续演进中,PCIe技术始终扮演着核心角色,其作为连接 CPU 与各类周边设备的关键高速通信链路,不断推动着计算机性能边界的拓展。而 PCIe Link Equalization均衡技术,作为保障数据在高速传输过程中准确性与稳…...
js代理模式
允许在不改变原始对象的情况下,通过代理对象来访问原始对象。代理对象可以在访问原始对象之前或之后,添加一些额外的逻辑或功能。 科学上网过程 一般情况下,在访问国外的网站,会显示无法访问 因为在dns解析过程,这些ip被禁止解析,所以显示无法访问 引…...
C++虚函数(八股总结)
什么是虚函数 虚函数是在父类中定义的一种特殊类型的函数,允许子类重写该函数以适应其自身需求。虚函数的调用取决于对象的实际类型,而不是指针或引用类型。通过将函数声明为虚函数,可以使继承层次结构中的每个子类都能够使用其自己的实现&a…...
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
