牛牛分蛋糕(暴力&二分)
思路:暴力 二分。
1.可以直接暴力枚举 分配盘子的个数,根据贪心的原则,分配平均值就是最优的。
时间复杂度:
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.看到最小值最大化就考虑二分了,每次 特判一下 分配的盘数和 分配的盘数之和是否 即可。
时间复杂度:
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;
}
};