二分查找——区间开闭性

具体到代码上,二分查找时区间的左右端取开区间还是闭区间在绝大多数时候都可以,因此
有些初学者会容易搞不清楚如何定义区间开闭性。这里我提供两个小诀窍,第一是尝试熟练使用一种写法,比如左闭右开(满足C++、Python 等语言的习惯)或左闭右闭(便于处理边界条件),
尽量只保持这一种写法;第二是在刷题时思考如果最后区间只剩下一个数或者两个数,自己的写法是否会陷入死循环,如果某种写法无法跳出死循环,则考虑尝试另一种写法

下面是区间开闭性的总结

三种写法:left和right最初的取值

①左闭右闭:left=0,right=numSize-1

②左闭右开:left=0,right=numSize

③左开右闭:left=-1,right=numSize-1

三种写法:left和right索引时的偏移

①左闭右闭:left = mid + 1, right = mid - 1

②左闭右开:left = mid + 1, right = mid

③左开右闭:left = mid, right = mid - 1

三种写法:while里的循环条件

①左闭右闭:left <= right

②左闭右开:left < right

③左开右闭:left < right

三种写法:mid的取值

①左闭右闭:mid = left + (right - left) / 2 或者 mid = left + (right - left + 1) / 2

②左闭右开:mid = left + (right - left) / 2

③左开右闭:mid = left + (right - left + 1) / 2

参考:https://blog.youkuaiyun.com/m0_63303316/article/details/123780707

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值