算法题17:二分查找
思路
二分查找:起点为数组的首尾left和right,取中间下标middle,将此元素和目标值进行比较,相等则返回middle,如果目标值比中间值小,则在左部继续查找,此时right = middle - 1;如果目标值比中间值da,则在右部继续查找,此时left = middle + 1,直到left > right时停止查找。
代码
int search(vector<int>& nums, int target) {
// write code here
if(nums.size() == 0) return -1;
// 左右下标
int left = 0;
int right = nums.size();
int middle = 0;
while(left<=right){
middle = (left + right)/2;
// 找到目标
if(nums[middle] == target) return middle;
else{
// 比middle大,在右边查找
if(nums[middle] < target){
left = middle + 1;
}
// 比middle小,左边查找
else{
right = middle - 1;
}
}
}
return -1;
}