分组
最优题解
因为要求最小值最大化,所以考虑二分答案
则检查全部k组数字和都大于等于mid是否可行。
可以直接贪心的去取段,如果不满mid就一直取直到满足为止。满足了就截断。
时间复杂度
空间复杂度
int solve(int n, int k, vector<int> &a){
assert(a.size() == n);
int l = 0, r = 1e9;
int ans;
while(l <= r){
int cnt = 0;
int mid = (r+l)>>1;
int cur = 0;
for(int i = 0; i < n; ++i){
cur += a[i];
if(cur >= mid) cur = 0, cnt++;
}
if(cnt >= k) ans = mid, l = mid+1;
else r = mid-1;
}return ans;
}
查看6道真题和解析