二分查找
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
采用左闭右闭区间
- 先计算 mid , 将数组从中间分开 mid = left + (right - left) / 2(这样计算可以防止数据越界)
- 比较目标值和中间值的大小,确定目标值在数组的哪一边
- while(left <= right) 循环,不断改变区间大小知道找到目标值,如果没有,返回 -1。
class Solution {
public:
int search(vector<int>& nums, int target) {
int right = nums.size() - 1;
int left = 0;
while(left <= right){
int mid = left + (right - left) / 2;
if (nums[mid] > target){
right = mid - 1;
}else if(nums[mid] < target){
left = mid + 1;
}else{
return mid;
}
}
return -1;
}
};