用二分查找法刷leetcode算法题目的时候,经常遇到视频看着理解很透彻,当上手写时一看就会,一写就废。二分查找法涉及边界条件很多,逻辑很简单,就是写不好。何时写 while(left<right),while(left<=right),还是 right=mid 还是right = mid - 1;等等, 其实我们只要控制区间是左闭右开、还是左闭右闭的条件,定义在区间循环变量不变的原则。
介绍 左闭右开 左闭右闭 这两种写法。
题目:leetcode704
思路:
数组是有序且数据无重复元素,返回下标就唯一,使用二分法的前提条件。若数据中重复元素,返回的下标就不唯一呢。
1、左闭右闭
定义target在左闭右闭区间中**[left, right]中,使用while(left <= right)**的循环条件,即left==right的条件是有意义的![在这里插入图
2、左闭右开
int left = 0;
int right