/** * 暴力算法一般容易超出时间限制 */ public static int baoLi(int x) { for (int i = 0; i <= x; i++) { int a = i * i; if (a == x) { return i; } if (a > x) { return i - 1; } } return x; }
/** * 二分法 0 ~ x 之间切割 */ public static int twoSplit(int x) { int l = 0; int r = x; int ans = -1; while (l <= r) { int mid = l + (r - l) / 2; //这里需要转换long,防止溢出 if ((long) mid * mid <= x) { l = mid + 1; //ans必须要在l这边,因为题意是要的商 ans = mid; } else { r = mid - 1; } } return ans; }