Liweiwei的模板
重点阅读这篇文章就可以了:liweiwei。
相应的视频:liweiwei。其中8-1,8-7和8-8是重点。
liweiwei文章的最后,列有三类题型,及相应的题目。
对liweiwei模板的几点体会:
1)该模板基本是采用“左闭右闭”。即L=最左的一个,R=最右的一个。
2)while(L<R) 还是 while(L<=R)
while(L<=R): 目标在循环体内能找到。如果循环体结束,表示没有找到结果。
if else 语句分三段判断(单独判断:mid==目标 )。
while(L<R): 循环体结束时,结果就是L。此时L=R。
if else 语句分二段判断(不单独判断:mid==目标 )。
3)mid 的取值是 L+(R-L)/2 还是 L+(R-L+1)/2 ? (取错了会导致死循环)
死循环只会发生在
a) 只剩2个元素的时候,即(L+1) ==R。
b) if else 语句分二段判断,
此时有两种题型:
题型1 -- 小于某数的最大的那个
L=mid, R=mid-1
采用 mid = L+(R-L)/2 -- 会死循环
采用 mid = L+(R-L+1)/2 -- 不会死循环
题型2 -- 大于某数的最小的那个
L=mid+1, R=mid
采用 mid = L+(R-L)/2 -- 不会死循环
采用 mid = L+(R-L+1)/2 -- 会死循环
Leetcode 二分法题库