二分法即对半查找,如果 target
小于中间数(mid
),即可在前半区查找……
前半、后半的划分:mid
用于比较,如果不相等,那么前半和后半就是不包含 mid
的区域。
int search(vector<int> nums, int target) {
int start = 0;
int end = nums.size() - 1;
int mid = -1;
while(start <= end) {
mid = (start + end) / 2;
if(nums[mid] > target) { // target 在前半
end = mid - 1;
} else if(nums[mid] < target) { // target 在后半
start = mid + 1;
} else {
return mid;
}
}
return -1;
}
int search(vector<int> nums, int target) {
int start = 0;
int end = nums.size();
int mid = -1;
while(start < end) {
mid = (start + end) / 2;
if(nums[mid] > target) { // target 在前半
end = mid;
} else if(nums[mid] < target) { // target 在后半
start = mid + 1;
} else {
return mid;
}
}
return -1;
}
start + end
有超出边界范围的可能,所以应该写成 start + (end - start)