一、题目
1、审题
2、分析
实现 sqrt(X) 方法,返回的 n 要求是 n*n < x 的最大整数.
二、解答
1、思路:
方法一、
采用二分查找法,查找 n。
// Binary Search public int mySqrt2(int x) { if(x == 0) return 0; int left = 1, right = x / 2; while(true) { int mid = (left + right) / 2; if(mid > x / mid){ // 若用 mid * mid > x 判断,则存在 Integer 范围溢出问题。 right = mid - 1; } else { if((mid + 1) > x / (mid + 1)) { return mid; } left = mid + 1; } } }
方法二、采用 NewTon 迭代法
public int mySqrt(int x) { if(x == 1) return 1; long r = x / 2; while(r * r > x) r = (r + x/r) / 2; return (int) r; }