常见场景:一个数组中查找一个数
二分查找的做法是定义查找范围[left,right],初次查找是数组的整个范围,每次查取范围的中间值,直到找到想要的数值
列如下面代码:
int search(vector<int>& nums, int target) {
int left=0,right=nums.size()-1;
while(left<=right){
int mid=((right-left)/2)+left;
int num=nums[mid];
if(num==target){
return mid;
}
else if(num>target){
right -=1;
}
else{
left +=1;
}
}
return -1;
}
在数组nums中查找target,查到并返回target的下标。left、right分别为数组起始、末尾的指针,当取值num>target时,右侧right指针往回移,小于则left往前移,直到num==target
-
时间复杂度:O(\log n)O(logn),其中 nn 是数组的长度。
-
空间复杂度:O(1)O(1)。