新闻详情

新闻详情

首页 / 资讯中心 / 详情

二分查找系列一

发布时间:2026/9/30 7:21:40来源:尧图网络
二分查找系列一
前言二分查找属于最恶心细节最多最容易写出死循环的算法。但是同是也是很简单的算法因为有模板而且很容易学会。主要应用与数组有序或者无序(有规律)的情况下。模板主要是朴素二分模板、查找左边界的二分模板、查找右边界的二分模板。1.二分查找题目链接704. 二分查找 - 力扣LeetCode思路图这道题就是一道朴素的二分模板。代码实现class Solution { public: int search(vectorint nums, int target) { int left 0, right nums.size()-1; while(left right) { //int mid (right left) / 2; int mid left (right - left 1) / 2; //防溢出 cout left : left - right : right endl; if(nums[mid] target) left mid 1; else if(nums[mid] target) right mid - 1; else return mid; } return -1; } };时空分析时间复杂度时O(logn)底数是2。空间复杂度为O(1)几个变量即可。2.在排序数组中查找第一个和最后一个位置题目链接34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣LeetCode思路图这道题相当于是查找左边界和右边界的结合情况还是有点复杂主要细节太多。需要分别分析很容易写出死循环建议每种情况先自己推荐一遍。上图解释了为什么需要有两个中点公式左端点和右端点是不一样的否则就会死循环。代码实现class Solution { public: vectorint searchRange(vectorint nums, int target) { int n nums.size(); if(!n) return {-1,-1}; int left 0, right n - 1, mid 0; vectorint ret; // 查找左端点 while (left right) { // left right 就是结果 mid left (right - left) / 2; if(nums[mid] target) left mid 1; else right mid; } if(nums[left] ! target) return {-1,-1}; ret.push_back(left); //查找右端点 left 0,right n - 1; while(left right) { mid left (right - left 1) / 2; if(nums[mid] target) right mid - 1; else left mid; } ret.push_back(left); return ret; } };时空分析时间复杂度是O(logn)两个二分查找。空间复杂度为O(1)虽然定义了一个vector但是只会消耗两个整型。3.x的平方根题目链接69. x 的平方根 - 力扣LeetCode思路图从1遍历到n使用二分查找注意循环条件和mid的取值公式不是固定的。需具体问题具体分析。只要不会造成死循环即可。像这里中点公式就只能使用另一个否则就会死循环。做多了你就会发现其实就这点套路。循环条件只能是left right当leftright时就是该值应该退出。代码实现class Solution { public: int mySqrt(int x) { if (!x) return x; int left 1,right x; while(left right) { //必须1防止死循环 int mid left (right - left 1) / 2; // cout left : left - right : right endl; if((long)mid*mid x) right mid - 1; else left mid; } return left; } };时空分析时间复杂度为O(logN)一次二分查找。空间复杂度为O(1)。4.搜索插入位置题目链接LCR 068. 搜索插入位置 - 力扣LeetCode思路图循环条件和中点处理需要特判一下别死循环。其他就没什么细节问题了。自己去推演一遍就很清楚了。代码实现class Solution { public: int searchInsert(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 right mid; } if(nums[left] target) return left; else return left 1; } };时空分析时间复杂度为O(logN)一次二分查找完成。空间复杂度为O(1)几个变量即可。5.山脉数组的峰顶索引题目链接852. 山脉数组的峰顶索引 - 力扣LeetCode思路图题目说了一定存在山脉数组所以不用讨论不存在的情况。当二分查找完毕数组应该是一个山顶的形状山顶就是我们要找的结果也就是left right的时候。其次在讨论一下中点公式基本思路就出来了。代码实现class Solution { public: int peakIndexInMountainArray(vectorint arr) { int left 0, right arr.size() - 1; while(left right) { int mid left (right - left) / 2; cout left : left - right : right endl; if(arr[mid] arr[mid1]) right mid; else left mid 1; } return left; } };时空分析时间复杂度为O(logN)一次二分查找即可。空间复杂度为O(1)。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

P2P系统原理深度解析:从Napster到Chord算法与流量管理 2026/9/30 8:13:26

P2P系统原理深度解析:从Napster到Chord算法与流量管理

简介:这份PPT系统讲解P2P对等网络的核心原理与组织结构,面向计算机网络课程学习者、分布式系统入门者及需要理解P2P流量特征的运维人员。内容从P2P技术的主要应用切入,梳理文件分发、语音服务、流媒体等场景,并重点剖析P2P与Overl…

阅读更多 →
IndexScan比SeqScan结果少?先排查这5类原因再决定重建索引 2026/9/30 8:13:26

IndexScan比SeqScan结果少?先排查这5类原因再决定重建索引

先别急着重建索引,也别急着回一句“索引坏了,reindex 吧”。我接到过不下十次这种求助,最后真正需要重建索引的不到一成。前两天同事火急火燎跑过来,给我看两条执行计划:同一张订单表,同一个 SQL 条件&…

阅读更多 →
大表不停服迁移的五阶段灰度方案:双写、增量追平与切读回滚 2026/9/30 8:13:26

大表不停服迁移的五阶段灰度方案:双写、增量追平与切读回滚

做后端的人,迟早会碰上这么一档子事:一张几千万行甚至上亿行的表,因为业务拆分、分库分表或者换存储引擎,得从旧的库表迁到新的库表。业务方提需求的方式通常很直接——“不能停服”。会议室里安静几秒之后,所有人脑子…

阅读更多 →
PostgreSQL索引扫描比全表扫描少?排查索引损坏的完整指南 2026/9/30 8:13:26

PostgreSQL索引扫描比全表扫描少?排查索引损坏的完整指南

前一阵有个朋友给我发来几张截图,他们生产库上同一个查询,强制走 IndexScan 返回 642 万行,改成 SeqScan 却返回 821 万行,差了快两百万行。群里有人抛出一句“索引坏了”,甚至有人建议赶紧停应用做全量索引重建。我赶…

阅读更多 →
Gitleaks 贡献指南:从零添加新检测规则并重新生成默认 gitleaks.toml 配置 2026/9/30 8:13:25

Gitleaks 贡献指南:从零添加新检测规则并重新生成默认 gitleaks.toml 配置

应用安全供应链安全 【免费下载链接】gitleaks Find secrets with Gitleaks 🔑 项目地址: https://gitcode.com/GitHub_Trending/gi/gitleaks 点击查看 免费下载 Gitleaks 是一款用于扫描仓库中硬编码密钥的开源工具,其默认检测能力全部来自…

阅读更多 →
Agent: The Washing Away of Wrongs — Prefix Caching: How MCP Ordering Affects Model Latency and Cost 2026/9/30 8:13:19

Agent: The Washing Away of Wrongs — Prefix Caching: How MCP Ordering Affects Model Latency and Cost

Agent: The Washing Away of Wrongs — Prefix Caching: How MCP Ordering Affects Model Latency and Cost About this series The Washing Away of Wrongs (《洗冤集录》) is a work of forensic medicine by Song Ci of the Southern Song dynasty. It brings together ea…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉