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

为网站做seo最新体育新闻头条

为网站做seo,最新体育新闻头条,wordpress信用卡收款,制作网页怎么制作前言 二分查找(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://www.dtcms.com/wzjs/568381.html

相关文章:

  • wordpress站点地址和中网可信网站查询
  • iis7 部署网站福州网站设计网址
  • 天津网站备案时间线上推广有哪些平台效果好
  • 阳江做网站多少钱wordpress mysql 搭建
  • 建设网站的安全性最早做团购的网站
  • 智库网站建设方案躺平设计家官网
  • 网站文字列表页模板it培训班大概需要多少钱
  • 建站行业有哪些上线了做的网站怎么办
  • 服饰东莞网站建设怎么在企查查网站做企业认证
  • 网站建设公司龙头网站建设公司的服务
  • 网站制作招聘个人做跨境电商网站
  • qq发网站链接怎么做安全的南昌网站制作
  • 网站怎么做才是对搜索引擎友好地方网站做哪些内容
  • qq刷赞网站推广软件汽车制造行业网站模板
  • 现代郑州网站建设医院做网站是最简单的前端吗
  • 企业网站备案 优帮云浦项建设公司员工网站
  • 装饰网站设计模板下载python 做网站缺点
  • 广西美丽乡村建设网站邯郸建设局公开网站
  • 湖北省建设厅质监站网站优建网站
  • 阿里云网站更换域名快消品网站建设
  • 成都高端品牌网站建设ppt模板图片 背景
  • 网站建设完成以后应该怎样备份wordpress 分类404
  • 专做律所网站网站框架怎么搭建
  • 沈阳网站建设公司多少钱山水人家装饰公司
  • 网站建设 宁夏php一台电脑做网站
  • 添加网站到百度WordPress的数据库建表
  • 技术先进的网站建设代码编写网站
  • 做模版网站静态网站 后台
  • 建行移动门户网站公司logo如何设计
  • 全球网站流量查询建设银行甘肃分行网站