本文共 1101 字,大约阅读时间需要 3 分钟。
本题要求实现一个函数 int sqrt(int x),用于计算给定整数 x 的整数平方根。该函数需要返回不大于 √x 的最大整数。
为了高效地解决这一问题,可以采用二分搜索算法。这种方法的核心思想是通过不断缩小搜索范围来快速找到目标值。以下是详细的实现步骤:
初始化变量
rmin 为 0,表示搜索的下界。rmax 为 x / 2,这是一个合理的上界估计。计算中间值
rmid 为 rmin 和 rmax 的中间值,即 rmid = (rmin + rmax) / 2。检查中间值平方是否等于 x
rmid * rmid 等于 x,则 rmid 就是 x 的平方根,直接返回。调整搜索范围
rmid * rmid 小于 x,说明 rmid 太小,需要向上调整搜索范围,令 rmax = rmid + 1。rmid * rmid 大于 x,说明 rmid 太大,需要向下调整搜索范围,令 rmin = rmid + 1。返回结果
rmin 会接近 rmax,此时返回 rmin 即可得到整数平方根。int sqrt(int x) { if (x < 0) return -1; if (x < 4) return x > 0 ? 1 : 0; long long rmin = 0; long long rmax = x / 2; while (rmin <= rmax) { long long rmid = (rmin + rmax) / 2; if (rmid * rmid == x) return rmid; if (rmid * rmid < x) rmax = rmid + 1; else rmin = rmid + 1; } return (int)rmin;} x 的值。如果 x 为负数,直接返回 -1。对于小于 4 的正数,直接返回其平方根。rmin 和 rmax,然后在 while 循环中不断调整搜索范围,计算中间值 rmid。rmid 的平方与 x 的关系,调整搜索范围,最终找到最大的整数平方根。rmin 作为整数平方根。这种方法的时间复杂度为 O(log x),在保证正确性的同时,能够高效地完成平方根计算。
转载地址:http://fqgyk.baihongyu.com/