南宁网站开发软件湖南网站托管
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;}
};