leetcode 704·二分查找
大家好,我是小学五年级在读的蒟蒻,专注于后端,一起见证蒟蒻的成长,您的评论与赞与关注是我的最大动力,如有错误还请不吝赐教,万分感谢。一起支持原创吧!纯手打有笔误还望谅解。
题目描述
给定一个 n
个元素有序的(升序)整型数组 nums
和一个目标值 target
,写一个函数搜索 nums
中的 target
,如果目标值存在返回下标,否则返回 -1
。
题解一
假设这个数组是全闭数组则查找数据时要判断left==right的情况
则left和right的取值要+1
class Solution {
public:
int search(vector<int>& nums, int target) {
int left,right,mid;
left=0,right=nums.size()-1;
while (left <= right)
{
mid=(left+right)/2;
if(nums[mid] == target){
return mid;
}
else if(nums[mid] < target){
left=mid+1;
}
else {
right=mid-1;
}
}
return -1;
}
};
题解二
假设区间范围是半开半闭区间则left和right就不可能相等,循环条件只能是left<right
并且开区间的下标移动不要减一
class Solution {
public:
int search(vector<int>& nums, int target) {
int left,right,mid;
left=0,right=nums.size();
while (left < right)
{
mid=(left+right)/2;
if(nums[mid] == target){
return mid;
}
else if(nums[mid] < target){
left=mid+1;
}
else {
right=mid;
}
}
return -1;
}
};