专题三二分算法
1.题目
题目分析:给一个目标数字,然后在数组里找到对应目标数字的下标,找不到就返回0
2.算法原理
先用left和right在数组两端,然后求出中间值,跟目标数字对比,如果大了就把right--,因为数组是有序的,所以要把中间值往左移一点来减少值,如果小了就把left++来把值放大,直到值与目标数字一样,如果没有找到就不存在。
补充:二分查找本质是二段性,通过分段把没有用的区间给舍弃掉,只留下有用的区间,然后一直重复过程,直到把区间缩短到很小的范围,并找到目标值。
二分查找的时间复杂度
二分查找模板
3.代码实现
class Solution {
public:
int search(vector<int>& nums, int target) {
int left=0,right=nums.size()-1;
while(left<=right)
{
int min=left+(right-left)/2;
if(nums[min]<target) left++;
else if(nums[min]>target) right--;
else return min;
}
return -1;
}
};