【LeetCode刷题】Day 11
专题三:二分查找模板:
-
根据题干分析,根据二分性,划分区间,得出二分最重要的几个要点:
-
- 判断条件:
while(......)
是left<=right
还是left<right
。这是第一个容易死循环的点。
- 判断条件:
-
- 求中点的方式:
mid = left + (right-left)/2
还是mid = left + (right-left+1)/2
这个点很关键。如果和下面mid
的迭代不相符,这便是第二个死循环的点。
- 求中点的方式:
-
- left和right的迭代:是
left = mid
还是left = mid+1
、是right = mid
还是right = mid -1
这都是需要清除的问题。
- left和right的迭代:是
1. 朴素二分模板:
while (left <= right)
{
int mid = left + (right - left) / 2;
if (......)
right = mid - 1;
else if (......)
left = mid + 1;
else
return mid;
}
2. 区间左值模板:
特点: 左值:左动,下有+1
上不加;
while(left<right)
{
int mid=left+(right-left)/2;
if