分组
最优题解
因为要求最小值最大化,所以考虑二分答案
则检查全部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; }