二分查找
二分法的一种写法:
假设目标值target在左闭右闭的区间 [left,right] 中。
class solution{
public:
int search(vector<int>& nums, int target){
int start,end;
int middle;
start = nums[0];
end = nums.length - 1;
while(start <= end){ //注意跳出循环的条件
middle = (start + end)/2;
if(nums[middle] > target){
end = middle - 1;
}
else if(nums[middle] < target){
start = middle + 1;
}
else{
return middle;
}
}
return -1; //查找不到则返回-1
}
};
- 时间复杂度:O(log n)
- 空间复杂度:O(1)