标准的二分查找:一开始循环条件没有加等号在有些case是错的,加等号就可以,而且另一句针对单个元素的数组的检查也可以省掉了。
做这道题主要是看到了知乎上关于二分查找的讨论:
使用这个模板编写二分查找法的一般流程:https://zhuanlan.zhihu.com/p/86136802
二分查找有几种写法?它们的区别是什么?:https://www.zhihu.com/question/36132386
讲的都很好,值得深入挖掘一下。
class Solution {
public:
int search(vector<int>& nums, int target) {
const int n = nums.size();
if(n < 1) return -1;
//if(n == 1 && nums[0]==target) return 0;
int left = 0;
int right = n-1;
while(left <= right) {
int mid = (left + right)/2;
if(nums[mid] == target) {
return mid;
}
else if(nums[mid] > target){
right = mid-1;
}
else{
left = mid+1;
}
}
return -1;
}
};