# 21-06-07-x 的平方根
# 题目地址
https://leetcode-cn.com/problems/sqrtx/
# 题目描述
实现 int sqrt(int x) 函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
示例 1:
输入: 4
输出: 2
示例 2:
输入: 8
输出: 2
说明: 8 的平方根是 2.82842...,
由于返回类型是整数,小数部分将被舍去
# 思路
二分,找最后一个平方小于等于x的数。
# 代码
/**
* @param {number} x
* @return {number}
*/
var mySqrt = function (x) {
let left = 0;
let right = x;
let ans = -1;
while (left <= right) {
let middle = Math.floor((right - left) / 2) + left;
if (middle * middle <= x) {
ans = middle;
left = middle + 1;
} else {
right = middle - 1;
}
}
return ans;
};
# 复杂度分析
- 时间复杂度:O(logN)
- 空间复杂度:O(1)