class Solution {
public:
int search(vector<int>& nums, int target)
{
int left=0;
int right=nums.size()-1;
while(left<=right)
{
int mid=(left+right)/2;
if(nums[mid]==target)
{
return mid;
}
else if(nums[mid]<target)
{
left=mid+1;
}
else
{
right=mid-1;
}
}
return -1;
}
};
有两种不同的写法嗷,我理解的是区间的问题,大佬们说的都是循环不变量,听起来就高大上了许多orz
class Solution {
public:
int search(vector<int>& nums, int target)
{
int left=0;
int right=nums.size();
while(left<right)
{
int mid=(left+right)/2;
if(nums[mid]==target)
{
return mid;
}
else if(nums[mid]<target)
{
left=mid+1;
}
else
{
right=mid;
}
}
return -1;
}
};
感兴趣的可以去看一下这篇leetcode的题解吖二分查找的 ”循环不变量“ , 只要理解, 根本不用死记硬背边界条件