题解 | #牛牛分蛋糕# | 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 ;
    }
}
全部评论

相关推荐

10-14 23:01
已编辑
中国地质大学(武汉) Java
CUG芝士圈:虽然是网上的项目,但最好还是包装一下,然后现在大部分公司都在忙校招,十月底、十一月初会好找一些。最后,boss才沟通100家,别焦虑,我去年暑假找第一段实习的时候沟通了500➕才有面试,校友加油
点赞 评论 收藏
分享
11-08 13:58
门头沟学院 Java
程序员小白条:竟然是蓝桥杯人才doge,还要花钱申领的offer,这么好的公司哪里去找
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务