题目描述
分析
找 x 的平方根保留整数后的结果,其实就是找 k^2 = x 的 k,因此可以利用二分思想去找 k
算法
二分查找
过程
二分查找区间的意义
在二分查找中, 左边界与右边界区间 —— [l ,r] 所包括的值实际上表示的是我们要查找的结果,也就是说,可能的答案只可能出现在这个区间中,这对于我们判断 mid 位置的值如果不符合要求时,如何移动 left, right 至关重要
通过二分找到 k
初始化变量,设 l = 0, r = x, 返回值 mid = -1,一般情况下,如果没找到则返回 -1
开始查找,在二分查找的每一步,都会比较 mid 平方与 x 的关系,根据比较的结果来调整 l / r
由于只涉及整数运算,因此找到合适的 mid 就返回他
代码
/**
* @param {number} x
* @return {number}
*/
var mySqrt = function(x) {
let l = 0, r = x, ans = -1
while (l <= r) {
const mid = l + ((r - l) >> 1)
if (mid * mid <= x) {
l = mid + 1
ans = mid
} else {
r = mid - 1
}
}
return ans
};