牛牛分蛋糕(暴力&二分)

牛牛分蛋糕(暴力&二分)

思路:暴力 o r or 二分。

1.可以直接暴力枚举 a a 分配盘子的个数,根据贪心的原则,分配平均值就是最优的。

时间复杂度: O ( n ) O(n)

class Solution {
public:
    int solve(int n, int a, int b) {
       int ans=1;
       for(int i=1;i<n;i++) ans=max(ans,min(a/i,b/(n-i)));
        return ans;
    }
};

2.看到最小值最大化就考虑二分了,每次 特判一下 a a 分配的盘数和 b b 分配的盘数之和是否 n \geq n 即可。

时间复杂度: O ( l o g n ) O(logn)

class Solution {
public:
    bool check(int x,int a,int b,int n){
         if(n*x>a+b) return 0;
         int cnta=a/x,cntb=b/x;
         int resta=a%x,restb=b%x;
         if(cnta+cntb>=n) return 1;
         else return 0;
    }
    int solve(int n, int a, int b) {
       int l=1,r=min(a,b);
        while(l<=r){
            int mid=(l+r)>>1;
            if(check(mid,a,b,n)) l=mid+1;
            else r=mid-1;
        }
        return r;
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_45750972/article/details/107444248