「力扣」第 69 题:x 的平方根(简单)


「力扣」第 69 题:x 的平方根(简单)

实现 int sqrt(int x) 函数。

计算并返回 x 的平方根,其中 x 是非负整数。

由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。

示例 1:

输入:4
输出:2

示例 2:

输入:8
输出:2
说明:8 的平方根是 2.82842...,由于返回类型是整数,小数部分将被舍去。

方法:二分查找

分析:根据题目中给出的示例,要我们找的是「边界值」,这个「边界值」的特点如下:

  • 平方以后小于 x 的有可能是解;
  • 平方以后等于 x 的一定是解;
  • 平方以后大于 x 的一定不是解。

根据以上 3 条性质写出代码。这里用「二分查找」的「思路 2」:在循环体内逐渐缩小目标元素的范围,在退出循环以后,剩下的那个元素一定就是目标值。具体解释请见 题解链接

Java 代码:

public class Solution {

    public int mySqrt(int x) {
        if (x == 0) {
            return 0;
        }
        if (x == 1) {
            return 1;
        }

        int left = 1;
        int right = x / 2;
        while (left < right) {

            int mid = left + (right - left + 1) / 2;
            // 平方以后大于 x 的一定不是解
            // 注意:写成除法,防止 mid * mid 溢出
            if (mid > x / mid) {
                // 下一轮搜索的区间是 [left, mid - 1]
                right = mid - 1;
            } else {
                // 下一轮搜索的区间是 [mid, right]
                left = mid;
            }
        }
        return left;
    }
}

文章作者: liweiwei1419
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 liweiwei1419 !
评论
 上一篇
「力扣」第 81 题:搜索旋转排序数组 II(中等) 「力扣」第 81 题:搜索旋转排序数组 II(中等)
「力扣」第 81 题:搜索旋转排序数组 II(中等)题解地址:二分查找(Python 代码、Java 代码)。 传送门:81. 搜索旋转排序数组 II。 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0, 0,
下一篇 
「力扣」第 35 题:搜索插入位置(简单) 「力扣」第 35 题:搜索插入位置(简单)
「力扣」第 35 题:搜索插入位置(简单) 链接 题解链接(含视频讲解) 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 你可以假设数组中无重复元素。 示例
  目录