剑指 Offer II 072. 求平方根(69. x 的平方根)
题目:
思路:
【1】话不多说这道题本身暴力破解是可以过的,而且基于限制为Integer.MAX_VALUE,所以可以知道根号为46341,那么基于这个进行遍历就好了。
【2】基于二分进行优化,因为从暴力破解这里我们看到了,不一定需要遍历那么多数据,所以筛选数据快的方式不就是二分吗,一下子过掉一半的数据。
代码展示:
二分的方式:
//时间1 ms击败89.94% //内存38.7 MB击败56.57% class Solution { public int mySqrt(int x) { if (x == 1 ){ return 1; } int l = 0, r = x/2, ans = -1; while (l <= r) { int mid = l + (r - l) / 2; if ((long) mid * mid <= x) { ans = mid; l = mid + 1; } else { r = mid - 1; } } return ans; } }