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

Day11 二分查找 -代码随想录 数组

代码随想录:704. 二分查找
题目链接:704. 二分查找

题目描述

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果 target 存在返回下标,否则返回 -1。

你必须编写一个具有 O(log n) 时间复杂度的算法。

示例 1:

输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9 出现在 nums 中并且下标为 4

示例 2:

输入: nums = [-1,0,3,5,9,12], target = 2
输出: -1
解释: 2 不存在 nums 中因此返回 -1

提示:

你可以假设 nums 中的所有元素是不重复的。
n 将在 [1, 10000]之间。
nums 的每个元素都将在 [-9999, 9999]之间。
点击查看代码
//左闭右闭
class Solution {
public:int search(vector<int>& nums, int target) {int left = 0;int right = nums.size() - 1;while(left <= right){int middle = (left + right) / 2;if(target == nums[middle]) return middle;else if(target > nums[middle]) left = middle + 1;else right = middle - 1;}return -1;}
};//左闭右开
class Solution {
public:int search(vector<int>& nums, int target) {int left = 0;int right = nums.size();while(left < right){int middle = (left + right) / 2;if(target == nums[middle]) return middle;else if(target > nums[middle]) left = middle + 1;else right = middle;}return -1;}
};
小结

二分查找

将一个已排序,无重复的数组,通过 left 和 right,缩小目标值区间范围
将 target  与  nums[middle] 比较,确定目标值,更新左右边界

注意点

关于循环终止条件

whiile() 中是 left<=right 还是 left<right

将nums[middle] 与 target 比较,然后重新确定边界。在不断更新循环条件,而循环条件应当是不变的,所以应与第一次循环边界能否取到一致。第一次循环时左右边界又与初始化有关,由于left是一直可以取到,所以只要看right取值。若right取值为nums.size()-1说明右边界可以取,接下来循环时也要取到right。若right取值为nums.size(),取不到右边界,那么循环时也不能取到right。

关于 right 的更新是否包含middle

right = middle - 1 还是 right = middle

right的更新就与循环条件有关。若循环条件中right可以取到,则right更新时应取middle-1。若循环条件中right取不到,则right更新时应取middle,这样在下一次循环中,right边界不会取到,可以取到实际可能为目标值的right-1
实际上还是与right的初始化有关,right的初始化决定了右边界是否可以取到

http://www.gsyq.cn/news/153889.html

相关文章:

  • 英伟达斥资200亿美元许可芯片初创公司Groq技术
  • 【计算机毕业设计案例】基于springboot旅游门票信息系统设计与实现基于springboot的旅游网站系统的设计与实现(程序+文档+讲解+定制)
  • 麦多福生鲜超市库存管理信息系统sb+v
  • 通信协议仿真:5G NR协议仿真_(5).5G NR仿真工具与平台
  • 美食推荐SpringBoot
  • 【课程设计/毕业设计】基于springboot的旅游网站系统的设计与实现基于springboot的旅游管理系统,在线旅游管理系统【附源码、数据库、万字文档】
  • 2025开顶集装箱厂家综合实力排名TOP5(产能+专利+服务三维度对比) - 爱采购寻源宝典
  • 常见端口的用途
  • 【弹簧阻尼器】无摩擦弹簧质量阻尼器系统稳态振动振幅比的三维曲面图研究附Matlab代码
  • AI搜索优化专业公司推荐,南方网通实力护航 - 工业设备
  • 2025勾花网厂家推荐排行榜:安平特迪产能领先,沃达专利优势突出 - 爱采购寻源宝典
  • Java毕设选题推荐:基于springboot的旅游网站系统的设计与实现基于springboot的旅游管理系统,在线旅游管理系统【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 2025 法兰球阀 厂家推荐排行榜:从产能到专利的权威解析 - 爱采购寻源宝典
  • 【弹簧阻尼器】基于卡尔曼滤波弹簧质量阻尼器系统噪声测量实时状态估计研究附Matlab代码
  • C 语言字符串函数超全解析
  • 2025铜芯电缆厂家推荐排行榜:从产能到专利的权威实力比拼 - 爱采购寻源宝典
  • Windows系统文件vbscript.dll丢失损坏问题 下载修复
  • Windows系统文件usercpl.dll丢失损坏问题 下载修复
  • 免费SSL证书申请自动验证:DNS解析代理
  • VAN.dll文件缺失找不到损坏问题 免费下载方法
  • [特殊字符] 一文看懂:Android 系统中如何“默认开启/关闭 USB 调试”?
  • 基于Uniapp的派出所业务管理系统微信小程序(程序+文档+讲解)
  • 医疗自动标注漏医生隐写症状 后来补NLP规则引擎才救回诊断准确率
  • Windows系统文件Vb5stkit.dll丢失损坏 下载修复
  • 揭秘Android定制:标签如何通过脚本操控系统
  • FX5U Active Socket TCP通讯FB 功能块 有几个通道,就拖几个FB,FB里...
  • Windows系统文件url.dll丢失损坏 下载修复
  • 第六十六篇
  • [模式识别-从入门到入土] 组合分类器
  • 装配制造业 - 风机核心产品