目录
1. 二分法注意点
1. left = -1, right = num;
2. while 以 (left + 1) != right为停止条件
3. if判断条件成立则letft = mid, 否则right = mid
4. if判断条件和return值总结如下:
以target等于5为例,输入: 1 2 3 5 5 5 8 9
1. 找到第一个 >= target 的元素 | ||
判断条件 < target,返回r (C++ 对应std:: lower_bound()) | ||
2. 找到最后一个 < target 的元素 | ||
判断条件 < target, 返回l (C++ 对应std:: lower_bound() - 1) | ||
3. 找到第一个 > target 的元素 | ||
判断条件 <= target,返回r (C++ 对应std:: uper_bound()) | ||
4. 找到最后一个 <= target 的元素 | ||
判断条件 <= target,返回l (C++ 对应std:: uper_bound() - 1) |
2. code demo
static int BinarySearch(int datas[], int num, int target)
{
int left = -1;
int right = num;
int mid;
while ((left + 1) != right) {
mid = ((right - left) >> 1) + left;
if (判断条件) {
left = mid;
} else {
right = mid;
}
}
return left or right;
}
3. 练习题
4. 感谢
感谢“五点七边”工作室的算法讲解,详细内容可以参考视频讲解
此处仅是个人学习总结