@[TOC](二分查找及模板深度解析:right <= left 还是 right < left ? mid=left+(right-left)/2还是mid=(left+right-left)/2 ?)
前言
下面博主会给出一道经典面试题进行分析,在最后会给出二分查找模板!!!
34. 在排序数组中查找元素的第一个和最后一个位置
题目:

1. 解读
我们可以将题目转化为求target第一次出现的下标,以及最后一次出现的下标。然后就转换成两次二分查找了,分别查找左右边界了!
2. 二分查找左边界

大概思路已经了,下面就是判断循环条件是right <= left 还是 right < left? 以及中点求取是 mid=left+(right-left)/2还是mid=left+(right-left +1 )/2 ?
2.1 循环判断条件
在上述循环中,我们得到了左右边界移动行为:left = mid + 1 和right = mid。

结论: 循环条件是right <= left 还是 right < left ,主要问题在于最后一步left=right是否会导致死循环。如果不会的,两者循环判断条件无所谓,任选其一即可。
2.2 中点求取

所以中点mid=left+(right-left)/2还是mid=left+(right-left +1 )/2,主要还是取决于左右下标行为在最后当数据为偶数(即2个)时是否会导致死循环。如果两种方式都不会,则两者任选其一。
但好在我们有模板,无需担心

本文详细解析了如何在排序数组中查找目标元素的第一个和最后一个位置的二分查找方法,涉及左边界和右边界的判断条件,以及模板的选择和使用策略。强调分析题意和根据区间变化选择正确模板的重要性。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



