分组

最优题解

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

相关推荐

有趣的牛油果开挂了:最近这个阶段收到些杂七杂八的短信是真的烦
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务