69. Sqrt(x)

mac2024-03-27  26

Implement int sqrt(int x).

Compute and return the square root of x, where x is guaranteed to be a non-negative integer.

Since the return type is an integer, the decimal digits are truncated and only the integer part of the result is returned.

Example 1: Input: 4 Output: 2 Example 2: Input: 8 Output: 2 Explanation: The square root of 8 is 2.82842..., and since the decimal part is truncated, 2 is returned.

从1挨个看,直到 i * i > x 。 注意 i 应该为long,以免 i * i 超出整型范围。 时间复杂度O(根号N) ,因为不可能走完所有的N。 走到根号N 就找到答案了。

class Solution { public int mySqrt(int x) { long i = 1; while (i * i <= x) { i++; } return (int)(i - 1); } }

优化: 可以使用二分法:

class Solution { public int mySqrt(int x) { long start = 1; long end = x; while (start + 1 < end) { long mid = start + (end - start) / 2; if (mid * mid > x) { end = mid; } else if (mid * mid < x){ start = mid; } else { return (int)mid; } } if (end * end <= x) { return (int)end; } return (int)start; } }
最新回复(0)