二分答案。
答案显然具有单调性,大于等于答案值的必然能在maxOperations次操作中达到,否则达不到。
class Solution {
public:
bool check(vector<int> &nums,int k,int p){
int cnt=0;
for(auto c:nums){
cnt+=(c-1)/p;
if(cnt>k) return false;
}
return cnt<=k;
}
int minimumSize(vector<int>& nums, int maxOperations){
int l=1,r=*max_element(nums.begin(),nums.end());
while(l<r){
int m=(l+r)>>1;
if(check(nums,maxOperations,m)) r=m;
else l=m+1;
}
return r;
}
};
时间复杂度:O(nlogC),C为数组中的最大元素。
空间复杂度:O(1)。