69. Sqrt(x)

195 阅读1分钟

题目描述

leetcode-cn.com/problems/sq…

分析

x 的平方根保留整数后的结果,其实就是找 k^2 = xk,因此可以利用二分思想去找 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
};