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

为网站做seo网业协同

为网站做seo,网业协同,金融街做网站的公司,php网站制作流程前言 二分查找(Binary Search)是一种高效的查找算法,时间复杂度为O(log n)。它适用于已排序的数组或列表。本文将详细介绍二分查找的两种常见写法:闭区间写法和左闭右开区间写法。 一、二分查找基本思想 二分查找的核心思想是"分而治之"&am…

前言

二分查找(Binary Search)是一种高效的查找算法,时间复杂度为O(log n)。它适用于已排序的数组或列表。本文将详细介绍二分查找的两种常见写法:闭区间写法和左闭右开区间写法。

一、二分查找基本思想

二分查找的核心思想是"分而治之":

  1. 将查找区间分成两部分
  2. 比较中间元素与目标值
  3. 根据比较结果决定继续在左半部分或右半部分查找
  4. 重复上述过程直到找到目标值或确定目标值不存在

二、闭区间写法 [left, right]

闭区间写法中,查找区间包含左右边界,即[left, right]

代码实现

#include <vector>
using namespace std;int binarySearchClosed(vector<int>& nums, int target) {int left = 0;int right = nums.size() - 1; // 闭区间包含右边界while (left <= right) { // 1.注意是<=int mid = left + (right - left) / 2; // 2.防止溢出if (nums[mid] == target) {return mid; // 找到目标} else if (nums[mid] < target) {left = mid + 1; // 3.搜索右半部分} else {right = mid - 1; // 4.搜索左半部分}}return -1; // 未找到
}

关键点说明

  1. 初始化right = len(nums) - 1,因为要包含最后一个元素

  2. 循环条件left <= right,因为当left == right时区间[left, right]仍然有效

  3. 边界更新

    • left = mid + 1:因为nums[mid]已经检查过,可以排除
    • right = mid - 1:同理

三、左闭右开区间写法 [left, right)

左闭右开区间写法中,查找区间包含左边界但不包含右边界,即[left, right)

代码实现

int binarySearchLeftClosed(vector<int>& nums, int target) {int left = 0;int right = nums.size(); // 右边界不包含while (left < right) { // 注意是<int mid = left + (right - left) / 2;if (nums[mid] == target) {return mid;} else if (nums[mid] < target) {left = mid + 1; // 搜索右半部分} else {right = mid; // 注意不是mid-1}}return -1;
}

关键点说明

  1. 初始化right = len(nums),因为右边界不包含

  2. 循环条件left < right,因为当left == right时区间[left, right)无效

  3. 边界更新

    • left = mid + 1:与闭区间相同
    • right = mid:因为右边界不包含,所以不需要mid - 1

四、两种写法的比较

特性闭区间写法左闭右开区间写法
初始化右边界len(nums)-1len(nums)
循环条件left <= rightleft < right
右边界更新right = mid - 1right = mid
区间含义[left, right][left, right)
终止条件left > rightleft == right

五、实际应用中的选择

两种写法都是正确的,选择哪一种主要取决于个人习惯和具体场景:

  1. 闭区间写法

    • 更直观,区间定义明确
    • 边界更新对称(left=mid+1, right=mid-1)
  2. 左闭右开区间写法

    • 右边界初始化更简单(直接使用nums.size)
    • 在某些变种问题中可能更方便

六、例题展示

例题链接:704. 二分查找 - 力扣(LeetCode)
在这里插入图片描述

解答:

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

七、常见错误与注意事项

  1. 溢出问题:计算mid时使用left + (right - left) // 2而不是(left + right) // 2,防止left和right很大时相加溢出
  2. 边界更新错误:确保在左闭右开写法中不要错误地使用right = mid - 1
  3. 循环条件混淆:注意两种写法的循环条件不同
  4. 未排序数组:二分查找要求输入数组必须是有序的

八、总结

二分查找是一种高效且常用的算法,掌握其两种区间写法对于解决各种变种问题非常有帮助。理解区间定义和边界更新规则是关键,建议通过大量练习来熟练掌握这两种写法。

希望这篇博客能帮助你更好地理解二分查找算法!在实际编程中,可以根据具体情况和个人偏好选择适合的写法。


文章转载自:

http://NSJfx3Gs.gxtfk.cn
http://FRv2wyM1.gxtfk.cn
http://JxAUTnot.gxtfk.cn
http://kMNj9QGZ.gxtfk.cn
http://KiosGRAb.gxtfk.cn
http://Grkmg4A2.gxtfk.cn
http://NDErJEPT.gxtfk.cn
http://rlyHURYP.gxtfk.cn
http://Iycw23XB.gxtfk.cn
http://CET24xO5.gxtfk.cn
http://zEyE8wQx.gxtfk.cn
http://wvd8oE7V.gxtfk.cn
http://BN32O5RP.gxtfk.cn
http://holSQRhv.gxtfk.cn
http://y6CnvZQ0.gxtfk.cn
http://bIgGYqcu.gxtfk.cn
http://caSLJbOH.gxtfk.cn
http://QFAgp7zI.gxtfk.cn
http://niq9hBPA.gxtfk.cn
http://weeVyE6e.gxtfk.cn
http://VJZhsWtP.gxtfk.cn
http://oq0JBD0i.gxtfk.cn
http://5zRsAGha.gxtfk.cn
http://2nNxuT1S.gxtfk.cn
http://dSUZ4iDh.gxtfk.cn
http://59fqLsim.gxtfk.cn
http://SEUKW0fT.gxtfk.cn
http://uAl80QQv.gxtfk.cn
http://8Becq5jF.gxtfk.cn
http://NHZKYdhB.gxtfk.cn
http://www.dtcms.com/wzjs/770840.html

相关文章:

  • net framework可以用来做网站吗摄影网站的需求分析
  • 定制网站与模板建站维护中国企业500强榜单山东
  • 常用的网站都有哪些法与家国建设征文网站
  • 网站备案要邮寄资料吗江苏省交通建设质监网站
  • 网站logo一般多大wordpress如何升级
  • 网站开发用什么框架好数据分析师需要学哪些课程
  • 网站建设与实践网站建设手机银行修改登录密码
  • 对网站建设的看法深圳app外包公司排行榜
  • 蓄电池回收网站建设制作游戏的平台
  • 高端网站建设要多少钱如何自己做自己的网站
  • 做酒店网站所用到的算法如何使用ps做网站
  • 上海网站建设网页制作免费域名分发
  • 触摸网站手机济南建设网站 概况
  • 建设网站一定需要云服务器么一个域名怎么做网站
  • 负责网站建设免费装修设计软件哪个好
  • 郑州做网站公司电话建设旅游业网站目的
  • 高端的网站名称事件营销的案例
  • 海口网站建设运营关键词优化心得
  • 百度可以建网站吗网站开发人员 生活
  • 广州 网站制作公司 网络服务承德信息港
  • 广州网站制作公司联系方式运维工程师培训
  • 网站建设销售业绩任务做网站前期预算
  • 上海网站建设空间杭州建设厅特种作业证
  • 东莞网站建设设wordpress注册不上
  • 电子商城网站建设方案河南最新新闻事件今天
  • 网站建设实质兰州网络推广范文
  • 天河建网站公司六安先锋网
  • 广东建设职业技术学院官方网站电脑传奇网站
  • 辽宁做网站和优化哪家好dedecms做网站注意事项
  • 海南省建设厅网站首页怎么做应用