简单二分查找,写代码的时候出现了问题
我写的代码
class Solution {
public:
int search(vector<int>& nums, int target)
{
int front = 0, back = nums.size()-1;
while(front + 1 < back)
{
int mid = (front + back)/2;
if (nums[mid] == target)
{
return mid;
}
else if (nums[mid] < target)
{
front = mid;
}
else
{
back = mid;
}
}
if(nums[front] == target )
return front;
else if(nums[back] == target)
return back;
return -1;
}
};
我根据用例修改代码后,后面两个丑陋的if和else if显得很诡异,这其实是因为我front = mid 和back = mid导致的,应该用front = mid+1或者back = mid -1,并且在改正之后应该让while的判断条件变成front<=back
改善的代码
class Solution {
public:
int search(vector<int>& nums, int target)
{
int front = 0, back = nums.size()-1;
while(front <= back)
{
int mid = (front + back)/2;
if (nums[mid] == target)
{
return mid;
}
else if (nums[mid] < target)
{
front = mid + 1;
}
else
{
back = mid - 1;
}
}
return -1;
}
};