《代码随想录》学习笔记,原链接:二分查找相关题目推荐
class Solution:
def mySqrt(self, x: int) -> int:
left, right = 0, x # 记录x可能的平方根的范围的左右边界(左闭右闭)
while left <= right:
mid = (left + right) // 2 # 记录中点位置
if x < mid ** 2:
right = mid - 1 # x的平方根在左边区间
elif x > mid ** 2:
left = mid + 1 # x的平方根在右半区间
else:
return mid
return right # 根据演算,如果不能找到x的整数平方根,那么循环结束后right就是x的向下取整平方根
【注】本题使用左闭右闭区间作为二分查找的左右边界,经过演算,当x找不到整数平方根而跳出while循环后,right的值就是x向下取整的平方根。