【C++算法】二分查找 -> 入门
二分我********二分查找的介绍二分查找的特点在二分查找中它是最恶心细节最多最容易写出死循环的算法但是只要我们把它弄清楚去理解最恶心就会变得最简单了学习中的侧重点1、算法原理使用二分查找不止可以在数组有序得情况去使用在我们理解的深刻那么我们也可以发现一些规律即使在数组无序中我们也可以去使用二分优化2、模板我们学习二分一定要去理解模板不要去死记硬背理解之后再去记忆才能发挥最大的功能二分查找模板一共有3个朴素的二分模板虽然比较简单但是它有一定的局限性左边界和右边界其实也算我们的万能模板开始学习一、二、三上链接704. 二分查找 - 力扣LeetCode一朴素的二分模板二分查找算法原理1.二分查找算法的本质是利用数组的有序性和二段性进行高效搜索。2.二段性通过比较中间元素将数组分成两个子数组根据比较结果舍去一部分继续在另一部分搜索。3.适用范围不仅限于有序数组只要满足二段性即可。二段性就是分半mid left (right - left)/2;例如在一堆数组我们要找target1、如果这个数组比5小的也就是1~4不是我们的目标值我们是不是可以舍去答案是的目标值在5~7的区间里2、继续搜是不是如果比5大的我们也不要呢答案是的3、在搜索如果mid target此时这个就是我们的答案可以直接返回了最后为什么可以不要这些值因为他不是我们需要的值呀人家要找5你搜6和7的区间有个屁用二分查找算法细节问题1.定义left和right指针初始化搜索区间。2.循环条件left right。3.在循环中计算中间元素的索引mid并与目标值进行比较。4.根据比较结果更新left或right指针缩小搜索区间。5.如果找到目标元素返回其索引如果未找到返回-1。class Solution { public: int search(vectorint nums, int target) { int left 0, right nums.size() - 1; while(left right) { int mid left (right - left) / 2;//防止溢出 if(nums[mid] target) left mid 1; else if(nums[mid] target) right mid - 1; else return mid; } return -1; } };mid为什么这样子写int left 2,000,000,000; // 20亿 int right 2,000,000,000; // 20亿 int mid (left right) / 2; // left right 40亿 ❌ 超过 int 最大值 21.47亿left 1,500,000,000 right 2,000,000,000 right - left 500,000,000 // ✅ 差值很小不会溢出 mid 1,500,000,000 250,000,000 1,750,000,000 // ✅ 正确34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣LeetCode二查找左边界的二分模板我们找7第一个出现的7为什么r要等于mid这仅适用于arr[mid] target的情况mid 值已大于 targetmid 及其右边都不可能等于 target。但如果arr[mid] targetmid 可能是答案不能rmid-1而应rmid保留 mid。为什么l要等于mid1如果arr[mid] target整个[l, mid]区间都小于 target不可能有答案所以应l mid1排除。如果arr[mid] target答案可能在[l, mid]此时不是lmid而是rmid向左收缩。三查找右边界的二分模板同理lmidarr[mid] targetmid 及其左边都可能 ≤ target但我们想要最右边的所以答案可能在[mid, r]区间因为 mid 可能就是答案也可能右边还有。此时应保留 mid收缩左边界l mid。rmidarr[mid] targetmid 的值已经大于 target那么 mid 及其右边都肯定不是答案直接排除r mid - 1细节讨论循环条件left right √当left right的时候就是最终结果如果判断容易造成死循环中点位置①left (right - left) / 2→左中位数偏左②left (right - left 1) / 2→右中位数偏右看一个极端例子left0, right1。如果找最后一个逻辑是if (arr[mid] target) l mid;用公式①偏左mid0→l 0区间[0,1]没变死循环。用公式②偏右mid1→l 1区间变为[1,1]正常退出。如果找第一个逻辑是if (arr[mid] target) r mid;用公式②偏右mid1→r 1区间[0,1]没变死循环。用公式①偏左mid0→r 0区间变为[0,0]正常退出。题目ac代码class Solution { public: vectorint searchRange(vectorint nums, int target) { if(nums.size()0)return {-1,-1}; int begin0; // 1、找左端点 int l0,rnums.size()-1; while(lr) { int midl(r-l)/2; if(nums[mid]target) { lmid1; }else { rmid; } } if(nums[l] ! target) return {-1,-1}; else beginl; // 2、找右端点 l0,rnums.size()-1; while(lr) { int midl(r-l1)/2; if(nums[mid]target) { lmid; }else{ rmid-1; } } return {begin,r}; } };总结模板

相关新闻

PulseView终极指南:快速掌握开源逻辑分析仪图形化工具

PulseView终极指南:快速掌握开源逻辑分析仪图形化工具

PulseView终极指南:快速掌握开源逻辑分析仪图形化工具 【免费下载链接】pulseview Read-only mirror of the official repo at git://sigrok.org/pulseview. Pull requests welcome. Please file bugreports at sigrok.org/bugzilla. 项目地址: https://gitcode.c…

2026/11/1 16:40:10 阅读更多 →
【claude code实践】用 Subagents 做架构分析:从局部修改到全局影响评估

【claude code实践】用 Subagents 做架构分析:从局部修改到全局影响评估

用 Subagents 做架构分析:从局部修改到全局影响评估 引言:为什么现在需要理解它 你有没有遇到过这样的场景:只打算修改一个函数的参数列表,但心里完全没底,不知道这一个小小的改动会牵扯多少调用链、破坏多少测试&…

2026/10/30 19:14:01 阅读更多 →
每日站会:保持简短而有效的方法

每日站会:保持简短而有效的方法

作者 |开发团队对于每日举行的站立会并非感到陌生, 因其在增添协作性以及透明性方面所取得的成效, 致使其在多种不同类型的团队以及项目当中得以被大范围应用推广, 团队每日都会开展一次站立会, 在此期间开发人员会同其他团队成员将自身工作目标以积极主动的姿态与项目以及交付…

2026/11/1 22:58:00 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/2 0:25:10 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/1 10:36:53 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/1 10:36:51 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/2 1:16:51 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/1 10:35:11 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/1 9:35:41 阅读更多 →

日新闻

周新闻

月新闻