整数二分要根据题目确定边界的等号是否取到 12345678910111213141516171819202122232425262728//check是根据题目定的一个判断方法public static boolean check(int x) { /* ... */}// 区间[l, r]被划分成[l, mid]和[mid + 1, r]时使用:public static int bsearch_1(int l, int r){ while (l < r) { //>>>表示无符号运算 int mid = l + r >>> 1; if (check(mid)) r = mid; // check()判断mid是否满足性质 else l = mid + 1; } return l;}// 区间[l, r]被划分成[l, mid - 1]和[mid, r]时使用:public static int bsearch_2(int l, int r){ while (l < r) { int mid = l + r + 1 >> 1; if (check(mid)) l = mid; else r = mid - 1; } return l;}//总之,具体问题具体分析 浮点数二分1234567891011121314//check是根据题目定的一个判断方法public static boolean check(int x) { /* ... */}public static double bsearch3(double l, double r) { //eps表示精度,取决于题目对精度的要求 final double eps = 1e-6; while (r - l > eps) { double mid = l + (r - l) / 2; if (check(mid)) r = mid; else l = mid; } return 1;}