分组

最优题解

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

相关推荐

在努力的外卷侠很靠谱:怎么,大家都没保底吗?我这美团已经入职了,不说了,系统派单了。
点赞 评论 收藏
分享
贺兰星辰:不要漏个人信息,除了简历模板不太好以外你这个个人简介是不是太夸大了...
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务