贪心之分割字符串

力扣410

package com.zhang.reflection.面试.算法模版.贪心算法;
import java.util.ArrayList;
/**
 * 给定一个长度为 n 的非负整数数组 num ,和一个整数 m ,你需要把这个数组 num 分成 m 个非空连续子数组。
 * 请你找出这些连续子数组各自的和的最大值最小的方案并输出这个值。
 * [1,2,3,4,5,6],3
 * 9
 * 1,2,3 为一组 4,5为一组,6为一组
 */
public class 分割数组 {
    public int splitMin (ArrayList<Integer> num, int m) {
        // write code here
        int left = 0;
        int right = 0;
        for(Integer n : num){
            left = Math.max(left, n);
            right += n;
        }
        int res = 0;
        while(left <= right){
            int mid = (left + right) / 2;
            if(ok(num, mid, m)){
                res = mid;
                right = mid - 1;
            } else {
                left = mid + 1;
            }
        }
        return res;
    }
    private boolean ok(ArrayList<Integer> nums, int mid, int m){
        int current = 0;
        for(Integer num : nums){
            if(current + num > mid){
                m--;
                current = num;
                if(m == 0){
                    return false;
                }
            } else {
                current += num;
            }
        }
        return true;
    }
}
全部评论

相关推荐

07-15 12:24
重庆大学 运营
坏消息:和好工作擦肩而过
给点吧求求了:怎么可能因为差几秒,估计就是简历更好看婉拒了
点赞 评论 收藏
分享
07-10 14:08
已编辑
江西农业大学 Java
念旧select:做完把项目放到自己硬盘里给他看,看完拷走
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务