题解 | #牛牛分蛋糕# | JAVA | 二分法
牛牛分蛋糕
http://www.nowcoder.com/practice/435b7ac0d7eb4927a0ce4ef2ffcc1385
public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 处理函数,返回在所有分法中,蛋糕数量最少的盘子中分到最多的蛋糕数量 * @param n int整型 n个盘子 * @param a int整型 a蛋糕数量 * @param b int整型 b蛋糕数量 * @return int整型 */ public int splitCake(int n, int a, int b) { if (a + b == n) { return 1; } //标准2分框架 , 套就完事了, 右边最大值肯定是 A+B的和 int left = 0, right = a + b; while (left < right) { int mid = left + (int)Math.ceil((right - left) / 2.0); if (check(mid, n, a, b)) { //够分的话 , 缩小左侧区间 left = mid; } else { //这里为什么是-1 ? 因为 mid肯定是不够分的, 所以值要减少 right = mid - 1; } } //返回left , right 随便那个。 return left; } /** * 是否够分? true 够 。 * * @param mid 最少值 * @param n 盘子数 * @param a A 蛋糕数量 * @param b B 蛋糕数量 * @return */ private boolean check(int mid, int n, int a, int b) { int count = 0; while (a - mid > 0){ a -= mid; count++; } while (b - mid > 0){ b -= mid; count++; } //如果count数量大于 盘子数, 说明是够分的。 return count >= n ; } }