day1
二分查找按照查找区间的不同,划分为两种。
一种是左闭右开。另一种是左闭右闭。
因为设定的查找区间不一样,所以代码的边界值也会不一样。
当左闭右开时,说明本次查询right不能被取到,则下一此就要取到right。同时根据区间的规定,左闭右开,left != right
当左闭右闭时,说明本次查询right可以被取到,那下次查询就不包括right。同时根据区间的规定,左闭右开,可以存在 left == right
//左闭右开
class Solution {
public:
int search(vector<int>& nums, int target) {
int left = 0, right = nums.size() ; //注意范围哈,这里的right不能被取到
while(left < right) //这是需要考虑的
{
int mid = left + (right - left)/2;
if(nums[mid] < target)
left = mid + 1;
else if(nums[mid] > target)
right = mid; // 还有这里,当左闭右开时,说明本次查询right不能被取到
//则下一此就要取到right
else
return mid;
}
return -1;
}
};
//左闭右闭
class Solution {
public:
int search(vector<int>& nums, int target) {
int left = 0, right = nums.size() - 1; //注意范围哈,这里的right是需要被取到的!
while(left <= right)
{
int mid = left + (right - left)/2;
if(nums[mid] < target)
left = mid + 1;
else if(nums[mid] > target)
right = mid - 1;
else
return mid;
}
return -1;
}
};