一、简介
1.1 二分查找的前提
1.2 模版
(背诵!!!)
二、例题
2.1 平方根(Leetcode 69)
注意边界问题,while的边界,结果return的边界,if-else先左先右的讲究。
(
由于要求结束在真实结果的左边,而最后跳出循环时一定是l=r,
那么如果真值有小数且此步要达到l=r的话,上一步不是l和r肯定只相差1,但是由于m只能是整数所以上一步m一定是最接近真值的下取整数,所以我们要m,所以要取最后崩盘前最后一次mid*mid<x时候的mid值
)
class Solution(object):
def mySqrt(self, x):
"""
:type x: int
:rtype: int
"""
if x==0 or x==1: return x
left, right = 0, x
while left<=right:
mid = (left+right)/2
if mid*mid==x:
return mid
if mid*mid<x:
left = mid + 1
res = mid
else:
right = mid - 1
return res