思路
二分法,左右指针
1、若midmid<=x且(mid+1)(mid+1)>x,找到平方根了,返回mid
2、若midmid>x,mid太大,右指针往左半边移动,right=mid-1
3、否则,mid太小,左指针往右半边移动,left=mid+1
注意:不用midmid,会溢出,题目要求向下取整,用mid//x
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param x int整型
# @return int整型
#
class Solution:
def sqrt(self , x: int) -> int:
# 二分,向下取整
if x==1:
return 1
left=1
right=x
while left<=right:
#中间值
mid=(left+right)//2
#不用mid*mid,会溢出,用mid/x
if mid <= (x//mid) and (mid+1) > x//(mid+1):
#在中间了
return mid
if mid > (x//mid):
#mid太大,往左半边走
right=mid-1
else:
#mid太小,往右半边走
left=mid+1
return 0
本文详细介绍了如何使用二分法在牛客网问题中求解平方根,通过左指针和右指针调整,避免溢出并向下取整。适合初学者理解算法原理。
180

被折叠的 条评论
为什么被折叠?



