求平方根
难度:简单
给定一个非负整数 x ,计算并返回 x 的平方根,即实现 int sqrt(int x) 函数。
正数的平方根有两个,只输出其中的正数平方根。
如果平方根不是整数,输出只保留整数的部分,小数部分将被舍去。
示例 1:
输入: x = 4
输出: 2
示例 2:
输入: x = 8
输出: 2
解释: 8 的平方根是 2.82842...,由于小数部分将被舍去,所以返回 2
二分查找
根据题目要求,可知需要寻找的数num1满足:
n
u
m
1
2
num1^2
num12 < x <
n
u
m
2
2
num2^2
num22
时间复杂度:
O
(
l
o
g
n
)
O(logn)
O(logn)
空间复杂度:
O
(
1
)
O(1)
O(1)
class Solution:
def mySqrt(self, x: int) -> int:
left, right = 0, x
while left <= right:
mid = int(left + (right - left) / 2)
if mid**2 <= x:
index = mid
left = mid + 1
else:
right = mid - 1
return index
牛顿迭代
牛顿法
f(x) = x^2 - a
求解 a 的平方根, 即求解 f(x) = 0 的解
f(x) ~= f(x0) + (x - x0) * f’(x0);
令 f(x) = 0 => x = (x0 + a/x0) /2 => 得到该迭代公式
时间复杂度:
O
(
l
o
g
n
)
O(logn)
O(logn)
空间复杂度:
O
(
1
)
O(1)
O(1)
class Solution:
def mySqrt(self, x: int) -> int:
n = 1
while abs(n * n - x) > 0.001:
n = n - (n-x/n)/2
return int(n)
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/jJ0w9p