二分查找及模板深度解析:right <= left 还是 right < left ? mid=left+(right-left)/2还是mid=left+(right-left +1 )/2 ?

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

@[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 + 1right = mid
在这里插入图片描述

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

2.2 中点求取

在这里插入图片描述

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

但好在我们有模板,无需担心

评论 59
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白debug~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值