n = intinputleft right = 0 nwhile left = right mid = left + right 2 if mid 2 = n left = mid + 1 else right = mid - 1printleft - 1给这一段代码打上非常详细的注释
获取用户输入的数值
n = int(input())
设置左右边界值
left, right = 0, n
开始二分查找
while left <= right:
# 获取中间值
mid = (left + right) // 2
# 判断中间值的平方是否小于等于n
if mid ** 2 <= n:
# 如果是,将左边界值更新为mid+1,因为mid已经被判断过了,不需要再次判断
left = mid + 1
else:
# 如果不是,将右边界值更新为mid-1,因为mid及其右侧的值都不符合条件
right = mid - 1
输出结果,由于left指向的是符合条件的最后一个数值+1,所以需要减去1
print(left - 1)
原文地址: https://www.cveoy.top/t/topic/e9mu 著作权归作者所有。请勿转载和采集!