x 的平方根-简单

难度:简单

题目描述:
实现  int sqrt(int x)  函数。

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

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

示例:

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


解题思路:
先写出边界情况: 0、1的平方根分别是0、1
剩下就是 x>=2 的情况:
设置 left 和 right 左右边界
开启 while 循环,每次循环求出中位数 mid
如果 mid 的平方正好等于 x,则返回 mid
如果 mid 的平方小于 x,说明平方根落在 mid 和 right 之间,让 left=mid,向目标值逼近
如果 mid 的平方大于 x,说明平方根落在 left 和 mid 之间,让 right=mid,向目标值逼近
退出循环的条件是 left 和 right 边界不再形成区间,产出不了有意义的 mid
var mySqrt = function (x) {
  if (x < 2) return x;
  let left = 1,
    right = x >> 1;
  while (left + 1 < right) {
    let mid = left + ((right - left) >> 1);
    if (mid === x / mid) {
      return mid;
    } else if (mid < x / mid) {
      left = mid;
    } else {
      right = mid;
    }
  }
  return right > x / right ? left : right;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
最后更新时间: 5/20/2020, 8:46:57 PM