题目地址:
https://www.lintcode.com/problem/sqrtx/description
给定一个非负整数 n n n,返回最大的满足 x 2 ≤ n x^2\le n x2≤n的 x x x。
直接二分。代码如下:
public class Solution {
/**
* @param x: An integer
* @return: The sqrt of x
*/
public int sqrt(int x) {
// write your code here
long l = 0, r = x;
while (l < r) {
long m = l + (r - l + 1 >> 1);
if (m <= x / m) {
l = m;
} else {
r = m - 1;
}
}
return (int) l;
}
}
时间复杂度 O ( log n ) O(\log n) O(logn),空间 O ( 1 ) O(1) O(1)。