二分查找的应用

什么时候用二分查找?

数据具有二段性的时候

第一题:

 题解代码:

class Solution {
public:int search(vector<int>& nums, int target) {int left = 0,right = nums.size()-1;while(left<=right){int mid = left+ (right-left)/2;//中间,left+区间长度if(nums[mid]>target){right = mid-1;}else if(nums[mid]<target){left = mid+1;}else return mid;}return -1;}
};

总结朴素二分查找的模板:

while(left<=right){//切记这里是<=int mid = left+ (right-left)/2;//防止溢出的写法if(..........){right = mid-1;}else if(............){left = mid+1;}else return ........;}

第二题:

题解代码:

class Solution {
public:vector<int> searchRange(vector<int>& nums, int target) {//特殊处理if(nums.size() == 0) return {-1,-1};int left = 0,right = nums.size()-1;int begin = 0;//二分⬅左端点while(left<right){//求中间int mid = left+(right-left)/2;if(target>nums[mid]) left = mid +1;else right = mid;}//判断是否有结果if(nums[left] != target) return {-1,-1};else begin = left;//二分右端点right  = nums.size()-1;while(left<right){int mid = left+(right-left+1)/2;if(target>= nums[mid]) left = mid;else right = mid-1;}return {begin,right};}
};

总结二分模板:

1、查找区间左端点的模板

//查找区间左端点的模板 
while(left<right){//求中间int mid = left+(right-left)/2;if(、、、、、、) left = mid +1;else right = mid;}

2、查找区间有端点的模板:


while(left<right){int mid = left+(right-left+1)/2;if(、、、、、) left = mid;else right = mid-1;}

3、帮助记忆的几句话:

1、下面用减上面就用加1;

2、下面按情况讨论;

第三题: 

题解代码:

class Solution {
public:int mySqrt(int x) {//处理特殊的额情况if(x<1) return 0;int left = 1,right = x;//固定的模板 while(left<right){long long mid = left+(right-left+1)/2;if(mid*mid<=x) left = mid;else right = mid-1;}return left;}
};

 第四题:

题解代码:

class Solution {
public:int searchInsert(vector<int>& nums, int target) {int left = 0,right = nums.size()-1;while(left<right){int mid = left+(right-left)/2;if(nums[mid]>= target) right = mid;else left = mid+1;}//处理一下特殊的情况if(nums[left]< target) return nums.size();return left;}
};

第五题:

题解思路:

 

所以代码如下:

class Solution {
public:int peakIndexInMountainArray(vector<int>& arr) {//分析:峰顶的元素一定严格大于前一个数,但是不一定大于后面的元素;int left = 1,right = arr.size()-2;//查找的位置的元素一定大于前面一个,小于或者等于后面一个while(left<right){int mid = left+(right-left+1)/2;if(arr[mid]>arr[mid-1]) left = mid;else right = mid-1;}return left;}
};

 

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

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

相关文章

cmake 之 CMakeLists.txt 中的函数是从哪里来的

我们都知道&#xff0c;cmake会解释执行 CMakeLists.txt 以及其他 *.cmake 脚本&#xff0c; 这里先给出一个“先验” 的知识点&#xff1a; 任何一个独立脚本或脚本函数命令的执行&#xff0c;都是通过 CPP 函数 RunListFile(...) 调用的 void cmMakefile::RunListFile(cmL…

QT 实现信号源实时采集功能支持频谱图,瀑布图显示

利用QT实现信号源实时采集功能&#xff0c;先看效果 支持双光标显示 &#xff0c;功率测量&#xff0c;带宽测量&#xff0c;载噪比测量&#xff0c;波形框选&#xff0c;水平移动等功能&#xff0c;下载链接 https://download.csdn.net/download/ZuoYueXian/90501632 实现方…

【Kafka】深入了解Kafka

集群的成员关系 Kafka使用Zookeeper维护集群的成员信息。 每一个broker都有一个唯一的标识&#xff0c;这个标识可以在配置文件中指定&#xff0c;也可以自动生成。当broker在启动时通过创建Zookeeper的临时节点把自己的ID注册到Zookeeper中。broker、控制器和其他一些动态系…

神聖的綫性代數速成例題10. N維矢量綫性運算、矢量由矢量組綫性表示、N個N維矢量相關性質

N 維矢量綫性運算&#xff1a; 設&#xff0c;是維矢量&#xff0c;是數。加法&#xff1a;。數乘&#xff1a;。 矢量由矢量組綫性表示&#xff1a; 設是n維矢量&#xff0c;若存在一組數&#xff0c;使得&#xff0c;則稱矢量可由矢量組綫性表示。 N 個 N 維矢量相關性質&…

在CentOS 7.6中安装openGauss 5.1.0 (Preview)数据库并使用Navicat进行远程连接的过程记录

部署环境 华为云Flexus应用服务器 操作系统&#xff1a;CentOS 7.6 openGauss版本&#xff1a;openGauss 5.1.0 (Preview) 参考文档 官方安装文档&#xff1a; https://docs.opengauss.org/zh/docs/5.1.0/docs/InstallationGuide/%E4%BA%86%E8%A7%A3%E5%AE%89%E8%A3%85%E6%B…

SysOM 可观测体系建设(一):万字长文解读低开销、高精度性能剖析工具livetrace

可观测性是一种通过分析系统输出结果并推断和衡量系统内部状态的能力。谈及可观测性一般包含几大功能&#xff1a;监控指标、链路追踪、告警日志&#xff0c;及 Continues Profiling 持续剖析能力。对于操作系统可观测&#xff0c;监控指标可以帮助查看各个子系统&#xff08;I…

Shell脚本学习笔记:从入门到变量(一)

前言 最近在看 Shell 脚本相关的内容&#xff0c;以下是我从入门到变量部分的整理笔记&#xff0c;内容有点多&#xff0c;但都是干货。 先从基础开始&#xff0c;再逐步深入。 一、Shell 脚本入门 1. Linux 如何控制硬件&#xff1f; Linux 靠内核操作硬件&#xff08;CP…

Linux应用:进程间通信

linux的进程间通信概述 进程间通信&#xff08;IPC&#xff0c;Inter - Process Communication&#xff09;是指在不同进程之间进行数据交换和同步的机制。由于每个进程都有自己独立的地址空间&#xff0c;直接共享内存存在困难&#xff0c;因此需要专门的 IPC 机制来实现进程…

el-input 不可编辑,但是点击的时候出现弹窗/或其他操作面板,并且带可清除按钮

1.focus“getFocus”鼠标聚焦的时候写个方法&#xff0c;弹窗起来 getFocus(){ this.定义的弹窗状态字段 true;} 2.点击确定的时候&#xff0c;数值赋值到el-input的输入框,弹窗取消&#xff08;this.定义的弹段字端 false&#xff09; 3.但是会有个问题就是el-input 不可点…

Weblogic未授权远程命令执行漏洞复现

1 漏洞简介 Weblogic是Oracle公司推出的J2EE应用服务器&#xff0c;CVE-2020-14882允许未授权的用户绕过管理控制台的权限验证访问后台&#xff0c;CVE-2020-14883允许后台任意用户通过HTTP协议执行任意命令。使用这两个漏洞组成的利用链&#xff0c;可通过一个GET请求在远程W…

海康SDK协议在智联视频超融合平台中的接入方法

一. 海康SDK协议详解 海康SDK协议原理 海康SDK协议是海康威视为开发者提供的一套软件开发工具包&#xff0c;用于与海康设备&#xff08;如摄像头、NVR、DVR等&#xff09;进行通信和控制。其核心原理包括&#xff1a; 网络通信&#xff1a;基于TCP/IP协议&#xff0c;实现设…

五模型对比!Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量时间序列预测

目录 预测效果基本介绍程序设计参考资料 预测效果 基本介绍 光伏功率预测&#xff01;五模型对比&#xff01;Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量时间序列预测(Matlab2023b 多输入单输出) 1.程序已经调试好&#xff0c;替换数据集后&#xff0c;仅运…

20250319在荣品的PRO-RK3566开发板的buildroot系统下使用集成的QT应用调试串口UART3

stty -F /dev/ttyS3 115200 -echo cat /dev/ttyS3 & echo serialdata > /dev/ttyS3 20250319在荣品的PRO-RK3566开发板的buildroot系统下使用集成的QT应用调试串口UART3 2025/3/19 14:17 缘起&#xff1a;在荣品的PRO-RK3566开发板的buildroot系统下&#xff0c;在命令…

Git 使用笔记

参考链接&#xff1a; 创建版本库 - Git教程 - 廖雪峰的官方网站 Git使用教程,最详细&#xff0c;最傻瓜&#xff0c;最浅显&#xff0c;真正手把手教 - 知乎 命令使用 cd f: 切换目录到 F 盘 cd gitCxl 切换目录到 gitCxl 文件夹 mkdir gitCxl 创建新文件…

Xilinx系列FPGA视频采集转HDMI2.0输出,基于HDMI 1.4/2.0 Transmitter Subsystem方案,提供6套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目我已有的 GT 高速接口解决方案我已有的FPGA图像处理方案 3、详细设计方案设计框图硬件设计架构FPGA开发板输入Sensor之-->OV5640摄像头动态彩条Video In To AXI4-S…

机器学习面试重点第二部分(动画版)

​ 目录 ​ 第一章、聚类算法 ​1.1 K-means 聚类 ​1.1.1 算法​编辑流程 1.1.2 优缺点 ​1.1.3 应用场景 ​1.2 层次聚类 ​1.2.1 算法流程 1.2.2 优缺点 ​1.2.3 应用场景 ​1.3 DBSCAN ​1.3.1 算法流程 1.3.2 优缺点 ​1.3.3 应用场景 1.3.4. 参数 ε&…

剑指Offer精选:Java与Spring高频面试题深度解析

一、Java底层核心机制 &#x1f525; 问题1&#xff1a;谈谈对Java的理解&#xff1f; &#x1f4cc; 核心技术特性 平台无关性 "一次编译&#xff0c;到处运行"&#xff1a;通过JVM实现跨平台兼容 字节码&#xff08;.class&#xff09;作为中间语言&#xff0c;…

RabbitMQ 集群降配

这里写自定义目录标题 摘要检查状态1. 检查 RabbitMQ 服务状态2. 检查 RabbitMQ 端口监听3. 检查 RabbitMQ 管理插件是否启用4. 检查开机自启状态5. 确认集群高可用性6. 检查使用该集群的服务是否做了断开重连 实操1. 负载均衡配置2. 逐个节点降配&#xff08;滚动操作&#xf…

【正点原子K210连载】第七十六章 音频FFT实验 摘自【正点原子】DNK210使用指南-CanMV版指南

第七十六章 音频FFT实验 本章将介绍CanMV下FFT的应用&#xff0c;通过将时域采集到的音频数据通过FFT为频域。通过本章的学习&#xff0c;读者将学习到CanMV下控制FFT加速器进行FFT的使用。 本章分为如下几个小节&#xff1a; 32.1 maix.FFT模块介绍 32.2 硬件设计 32.3 程序设…

嵌入式开发之STM32学习笔记day08

从“门铃”到“中断”&#xff1a;手把手玩转STM32的外部中断控制器&#xff08;EXTI&#xff09; 引言&#xff1a;为什么我们需要“中断”&#xff1f; &#xff08;类比生活场景&#xff1a;用“快递按门铃”解释中断的意义&#xff09; 想象一下&#xff1a;当你在…