算法系列之新思路搞定二分法的边界问题
创作时间:
作者:
@小白创作中心
算法系列之新思路搞定二分法的边界问题
引用
CSDN
1.
https://m.blog.csdn.net/cherry__yu/article/details/137148144
二分查找算法虽然在学习阶段反复被提及,但在实际编写时,边界条件、循环条件等细节问题常常让人困扰。本文将介绍一种新的思路——"蓝红区域思想",帮助读者更好地理解和解决二分查找中的边界问题。
传统二分查找回顾
让我们先回顾一下传统的二分查找实现:
var searchInsert = function(nums, target) {
const len = nums.length;
let left = 0;
let right = len - 1;
while(left <= right) {
const mid = Math.floor((left + right) / 2);
if (nums[mid] === target) {
return mid;
}
if (nums[mid] > target) {
right = mid - 1;
continue;
}
if (nums[mid] < target) {
left = mid + 1;
continue;
}
}
return left;
};
蓝红区域思想
这种方法来自于Bilibili上的一个视频(BV1d54y1q7k7),通过实践发现非常实用。
我们可以将数组想象成一个模型,其中前面的区域是满足某种条件的"蓝色区域",后面的区域是"红色区域"。初始时,数组没有颜色,我们的目标是找到蓝红区域的边界位置。
实现步骤如下:
- 初始化两个指针
l
和r
,分别指向蓝色区域和红色区域的边界外(即-1
和length
)。 - 通过二分查找,使两个指针快速向蓝红边界逼近,直到
l + 1 = r
。 - 根据具体问题和区域条件定义,决定返回
l
还是r
。
代码模板如下:
l = -1, r = N
while l + 1 !== r
m = Math.floor((l + r) / 2)
if isBlue(m)
l = m
else
r = m
return l or r
解题步骤
拿到题目后,我们需要完成以下步骤:
- 建模:划分蓝红区域,确定
isBlue()
函数。 - 确定返回
l
还是r
。 - 套用算法模板。
- 进行一些额外处理(如果需要)。
实例分析
让我们通过两道LeetCode题目来具体说明这种方法的应用。
题目1:二分查找
题目要求:在一个升序数组中查找目标值,如果找到则返回其索引,否则返回 -1。
示例:
输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9 出现在 nums 中并且下标为 4
输入: nums = [-1,0,3,5,9,12], target = 2
输出: -1
解释: 2 不存在 nums 中因此返回 -1
思路:将蓝色区域定义为小于目标值的区域,这样最后划分出的分界点处,红色区域指针指向的就应该是目标值。如果不是的话,说明目标值不存在。
function search(nums: number[], target: number): number {
let l = -1, r = nums.length;
while (l + 1 < r) {
let mid = Math.floor((l + r) / 2);
if (nums[mid] < target) {
l = mid;
} else {
r = mid;
}
}
return nums[r] === target ? r : -1;
};
题目2:搜索插入位置
题目要求:在一个排序数组中查找目标值,如果找到则返回其索引;如果未找到,则返回目标值应该插入的位置,以保持数组的升序。
思路:与上一题类似,蓝色区域仍然是小于目标值的区域。这样最后划分出的分界点处,红色区域指针指向的就应该是目标值或插入位置。
var searchInsert = function(nums, target) {
let l = -1, r = nums.length;
while (l + 1 < r) {
mid = Math.floor((l + r) / 2);
if (nums[mid] < target) {
l = mid;
continue;
}
r = mid;
}
return r;
};
通过这两个例子可以看出,"蓝红区域思想"在处理二分查找问题时具有很强的通用性和灵活性,只需要根据具体问题微调返回值处理即可。
热门推荐
压电喷射阀工作原理及应用场景
拉肚子是黄色的稀屎是怎么回事
《勇敢的心:世界大战》中文版
认识鸟类:喜鹊
鹊鸲:黑白相间的美丽歌者
日常训练太硬核!走进特警训练基地 看“冠军”是怎样练成的
国际观察:中国民营企业加速“出海”谋共赢
春季西装搭配指南:N种穿法打造时尚职场女性
第三人算不算被告
全年赏花图鉴!22种最绚丽的球根植物,让花园四季缤纷~
农村围墙建设需要哪些审批手续?
肝功能报告单主要看哪几项
为何《封神榜》里的申公豹能被封神?他和姜子牙又是什么关系
饺子导演解析申公豹结巴之谜:背后的深刻寓意与社会隐喻
孕晚期SD值标准值意义是什么
八字命理中的寅巳申三刑:含义与化解之道
C语言中如何导入其他的全局变量
被传将下架的《甄嬛传》为何依旧热度不减
车企门店:如何打造高效的销售团队?
古代玉如意的用途与象征意义:文化传承与审美追求的完美结合
古代玉如意的用途与象征意义:文化传承与审美追求的完美结合
十二个提升摄影创意的小技巧,让你的摄影技术更上一层楼
SCI期刊选择指南:八大维度助力科研论文发表
打造趣味与安全并重的幼儿园设计理念探索之旅
“打”个公交正悄然流行
怪物猎人荒野标准版/豪华版/高级豪华版对比:三个版本有何区别?哪个值得买?
跨境物流费用计算与选择指南
土壤溶液中可溶性锌的测定
中国电气装备首签沙特项目,2025开局强势破局
瘦西湖的传说