LeetCode - Sqrt(x)
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.
思路:用二分法来做,average时间复杂度 O(logn)
class Solution { public int mySqrt(int x) { if (x<2) return x; int l = 0; int h = x; int res = 0; while (l <= h) { int m = l + (h-l)/2; if (m <= x/m && (m+1) > x/(m+1)){ return m; } if (m > x/m) { h = m-1; } else if (m < x/m) { res = m; l = m+1; } } return res; } }
class Solution { public int mySqrt(int x) { if (x == 0) return 0; if (x <= 3) return 1; int left = 2; int right = x/2; int res = 0; while(left <= right) { int mid = left + (right - left)/2; if (mid <= x/mid && (mid + 1) > x/(mid + 1)) { return mid; } if (mid > x/mid) { right = mid - 1; } else { left = left + 1; } } return 0; } }
posted on 2019-10-08 13:20 IncredibleThings 阅读(110) 评论(0) 编辑 收藏 举报