当前位置: 首页 > news >正文

二分查找解题

我的第一版代码是:

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

思路是,如果找到了mid等于目标,就返回mid,如果没找到,就进入while循环。如果目标大于中间值,说明中间值不会是目标,left=mid+1,但如果左右都挨着了,目标大于最右边或者小于最左边,就不再继续了,所以写了left!=right,同理如果左边大于等于右边,也就是中间值已经不再区间内了,就return -1.

我觉得特别完美。

但是只通过了6个实例。

我非常难过。

第三个分支else if (left >= right)只有在前两个条件都为假时才会执行。

随即更换成更简单的循环思路:当left小于等于right时循环,这样如果超出了就直接返回-1,

class Solution { public: int search(vector<int>& nums, int target) { int left,right; left=0; right=nums.size()-1;//// 定义target在左闭右闭的区间里,[left, right],还有一种做法是左闭右开 int mid=(right+left)/2; while(left<=right){ if(target>nums[mid]){ left=mid+1; mid=(right+left)/2; } else if(target<nums[mid]){ right=mid-1; mid=(right+left)/2; } else return mid; } return -1; } };

开篇之作!

做第二道题,准备用左闭右开的方法:

class Solution { public: int searchInsert(vector<int>& nums, int target) { int left=0; int right=nums.size();//左闭右开 while(left<right){ int mid=(left+(right-1))/2; if(target>nums[mid]){ left=mid+1;//这里第一次做错了,左闭,记得加一 } else if(target<nums[mid]){ right=mid; } else return mid; } return left; } };

为什么左闭就要加1,右闭就要减1呢,不加不减就会超时?

解释“左闭”意味着left索引在搜索范围内。当nums[mid] < target时,mid位置已被检查且不符合要求,所以必须从区间中剔除。因为左端是“闭”的(包含),如果设置left = mid,就会把不合格的元素重新圈进来,导致区间无法缩小(死循环)。所以必须left = mid + 1

http://www.jsqmd.com/news/1067175/

相关文章:

  • 信托制物业缴费模式的数智化落地实践与技术架构
  • 埃拉托斯特尼算法(埃氏筛)【简单】
  • Java 转大模型开发:团队协作中的使用边界
  • 好久不见,甚是想念
  • AI原生混合架构实战白皮书(SITS 2026多模型协同工程化手册)
  • 卡梅德生物技术快报|噬菌体展示多肽筛选完整实操方案|RhE 抗原靶向肽全流程实验与量化数据
  • 教育机构服务解析:飞橙教育收到客诉20条 已处理回复20条
  • 第十六周学习笔记
  • HML-vision
  • 沪漂五周年了:我越来越迷茫了
  • 项目协同管理系统系列4-项目统筹
  • Linux安装——虚拟机安装方式
  • 刘强东称京东所有AI技术都会向伙伴开放,东哥大格局咋看?
  • AI 智巡赋能千行 一网统飞守护全域
  • 大数据转大模型:把学习路线变成作品集
  • 2026年AI模型API中转网站全网真实实测:五大主流平台全维度硬核数据对比选型指南
  • YC最新判断:下一代大公司,可能不是卖软件的
  • Vscode 使用Copilot拓展接入deepseek v4
  • 中小企业如何利用短视频实现获客增长
  • AI领域每日资讯日报 | 2026年6月22日
  • pip包管理实战:换源加速、安装卸载、requirements依赖导出
  • 基于FPGA的 AXI-Lite CAN 通信 IP 核设计
  • Sakana Fugu:统一指挥多智能体,多领域性能卓越,2026 年定价与使用指南来了!
  • [机器学习]Kaggle:Hull Tactical - Market Prediction-有效市场
  • 阿里云ECS安全组与远程连接设置完全指南
  • 智搜GEO:AI搜索引擎优化的内容策略与技术框架
  • 插件热更新失败率下降87.3%?——揭秘奇点大会公布的3种Rust+WebAssembly混合调度模型及性能压测原始数据
  • 【AI原生多模态融合终极指南】:2026奇点大会首发的3大跨模态对齐范式与工业级落地验证数据
  • Agent 17 种架构模式 分析 思考
  • 微软的暗线:砸下1370亿却刻意避开OpenAI,纳德拉留给一号位的组织解耦局