赞
踩
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sqrtx
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
已知x是非负整数,那么一定有要求的平方根小于x,所以可以从0开始遍历,直到找到平方后大于x的值,再在这个值上减去1即可。
class Solution {
public:
int mySqrt(int x) {
int seed = 0;
while ((long long)seed * seed <= x)
{
seed ++;
}
return seed - 1;
}
};
复杂度分析
时间复杂度:
O
(
n
)
O(n)
O(n),从0到x遍历
空间复杂度:
O
(
1
)
O(1)
O(1)
从暴力枚举出发进行优化,利用二分法找目标值。
class Solution { public: int mySqrt(int x) { int left = 0; int right = x; int seed = -1; while (left <= right) { int mid = left + (right - left) / 2; if ((long long)mid * mid <= x) { seed = mid; left = mid + 1; } else { right = mid - 1; } } return seed; } };
复杂度分析
时间复杂度:
O
(
l
o
g
(
n
)
)
O(log(n))
O(log(n))
空间复杂度:
O
(
1
)
O(1)
O(1)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。