二分查找
本博客分析了二分查找,给出了C++源码。
分析
要对一个序列进行二分查找,序列得满足以下2点要求:
- 顺序排列:待查找的序列必须得是有序的,这样才能够通过当前元素和目标元素的大小关系确定下1步的查找方向
- 随机访问:说白了,就是序列应该为“数组”(可以通过下标访问)而不是“链表”
源码
class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
int start = -1, end = nums.size();
int mid;
while(end > start + 1){
// 防止溢出,不能直接“mid = (start + end) / 2“,
// 否则Start + end 有可能溢出
mid = start + (end - start) / 2;
if(nums[mid] > target){
end = mid;
}
else if(nums[mid] < target){
start = mid;
}
else{
return mid;
}
}
return start + 1;
}
};