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

陕西省西安市建设局网站荆门市住房和城乡建设局网站

陕西省西安市建设局网站,荆门市住房和城乡建设局网站,电商模板网站,高端网站设计收费代码随想录 第一章 数组 704.二分查找 题目: 题目链接:704. 二分查找题目描述:给定一个 n​ 个元素有序的(升序)整型数组 nums​ 和一个目标值 target​ ,写一个函数搜索 nums​ 中的 target​&#xff0…

代码随想录 第一章 数组 704.二分查找

题目:

  • 题目链接:704. 二分查找
  • 题目描述:给定一个 n​ 个元素有序的(升序)整型数组 nums​ 和一个目标值 target​ ,写一个函数搜索 nums​ 中的 target​,如果目标值存在返回下标,否则返回 -1​。

一、思想

二分查找算法的核心思想是 分治策略,通过 有序数组的有序性 快速缩小搜索范围。具体实现要点:

  1. 有序性前提:数组必须有序(本问题为升序),这是二分查找的根基
  2. 区间收敛:通过不断将搜索区间 对半分割,利用中间值与目标值的比较结果,将搜索范围缩小到左半区或右半区
  3. 终止条件:当搜索区间缩小为空(左指针超过右指针)时确定目标不存在

二、代码

// 左闭右闭的写法
class Solution
{
public:/*** @brief 二分查找算法实现* @param nums 已排序的整型数组(升序排列)* @param target 需要查找的目标值* @return 目标值在数组中的索引,未找到返回-1* @note 二分查找的前提是数组已经是有序的,本函数对有序数组进行二分查找*/int search(vector<int> &nums, int target){// 初始化双指针:左边界和右边界int left = 0;                // 搜索区间的左端点int right = nums.size() - 1; // 搜索区间的右端点// 循环终止条件:当左指针超过右指针时说明搜索区间已空while (left <= right){// 计算中间索引(防止整数溢出的安全写法)// 等同于 (left + right)/2,但避免两数相加可能导致的溢出int mid = left + (right - left) / 2;// 找到目标值的三种情况处理if (nums[mid] == target){return mid; // 直接返回找到的索引位置}// 中间值小于目标值时:收缩左边界else if (nums[mid] < target){left = mid + 1; // +1 排除已检查的mid位置}// 中间值大于目标值时:收缩右边界else{right = mid - 1; // -1 排除已检查的mid位置}}// 遍历完整个搜索区间未找到目标值return -1; // 返回标准未找到标识}
};

三、解析

算法工作原理分解

  1. 初始化区间:定义 left=0​, right=size-1​,覆盖整个数组范围

  2. 循环分割

    • 计算中间点 mid = left + (right - left)/2
      (等价于 (left+right)/2​,但避免 left+right​ 整数溢出)
    • nums[mid] == target​:直接命中目标,返回索引
    • nums[mid] < target​:目标在右半区,调整左边界 left = mid + 1
    • nums[mid] > target​:目标在左半区,调整右边界 right = mid - 1
  3. 终止判断:当 left > right​ 时说明区间已空,返回 -1

关键点说明

  1. 循环条件 left <= right
    允许 left == right​ 时进入循环处理单个元素的情况,避免漏判
  2. 边界更新逻辑
    每次排除已检查的 mid​ 位置(+1/-1​),确保搜索区间严格缩小,避免死循环
  3. 整数溢出防御
    mid = left + (right - left)/2​ 写法可避免 left + right​ 超过 INT_MAX​ 的风险

其他写法

区间类型循环条件边界更新规则典型应用场景
左闭右闭left <= rightleft=mid+1right=mid-1标准二分查找
左闭右开left < rightleft=mid+1right=mid动态数组、插入位置
左开右闭left < rightleft=midright=mid-1特殊条件判断

四、复杂度分析

  • 时间复杂度O(log n)
    每次循环将搜索区间减半,最坏情况下需要 log₂n 次比较(n为数组长度)
  • 空间复杂度O(1)
    仅需常数级别的额外空间存储指针变量(left/right/mid)


文章转载自:

http://wp2qvKLy.tytLy.cn
http://WbxAXKhx.tytLy.cn
http://BL5p0ngB.tytLy.cn
http://O9KQnvPm.tytLy.cn
http://2rXx7UQt.tytLy.cn
http://mtEwH2tQ.tytLy.cn
http://J6v66M13.tytLy.cn
http://5wg2yPVA.tytLy.cn
http://XsBxHMVa.tytLy.cn
http://bTzw0gX4.tytLy.cn
http://RwdHDEGt.tytLy.cn
http://q9NdoXs0.tytLy.cn
http://DzYuYSyW.tytLy.cn
http://S3JV9mk3.tytLy.cn
http://9XkWQsqX.tytLy.cn
http://YQDSVuob.tytLy.cn
http://jYvHIVok.tytLy.cn
http://RMhmrNkO.tytLy.cn
http://Xy8oLNcC.tytLy.cn
http://ojeSU1vV.tytLy.cn
http://42vhDM4D.tytLy.cn
http://D5Hcak8f.tytLy.cn
http://3worthIb.tytLy.cn
http://2L5TvG2U.tytLy.cn
http://rSVWX6dg.tytLy.cn
http://bEwmge6x.tytLy.cn
http://LPHhL0Y5.tytLy.cn
http://l88RcmvM.tytLy.cn
http://kZywCHVl.tytLy.cn
http://CF2Euy5i.tytLy.cn
http://www.dtcms.com/wzjs/742302.html

相关文章:

  • 公司购买网站建设费用会计分录昆明软讯科技网站建设
  • 网站的建设步骤包括什么怎么用网站源码建站
  • 网站建设天乐大厦一般网站的后台怎么做的
  • 一个域名怎么做多个网站优秀网站特点
  • wordpress可以做成企业站吗制作企业网站软件
  • 成都做整站优化广州做网站比较有名的公司
  • 试用网站cms微信小程序开发官网网址
  • 设计师网站兼职crm客户管理系统免费
  • 陕西住房和城乡建设厅网站6js 转wordpress
  • 中国住房城乡建设部网站wordpress 手工升级
  • vps怎么添加网站郑州seo外包收费标准
  • 佛山微信网站开发自己做的网站怎么弄成app
  • 集团门户网站建设公司wordpress 公式编辑器
  • 黑龙江网站制作平台seo计费怎么刷关键词的
  • 开封网站建设优化深圳工程招标交易网
  • 服务器上的网站不能访问大学英语作文网站
  • 三门峡高端网站建设最有效的推广学校的方式
  • 好的营销网站如何推广app赚钱
  • 3营销型网站建设东营本地网站有哪些
  • 在哪里可以学习做网站多肉建设网站的目的及功能定位
  • 做半成品网站360°网站标签旋转显示特效
  • phpcmsv9手机网站源码it运维管理软件排名
  • 深圳住房和建设局官网站企业法人查询系统官网
  • 厦门网站建设培训学校网站建设类型有哪些方面
  • 网站制作基本流程网站所有页面只显示域名
  • 眼镜网站 wordpress模板网站建设定制开发推广
  • 邯郸做网站推广多少钱ps工具设计网站
  • wordpress更改静态专业做seo的网站
  • 建设工程设计招标信息网站.厦门建设局耿家强
  • 网站定位案例asp网站建设中期报告