Split Array Largest Sum

Given an array which consists of non-negative integers and an integer m, you can split the array into m non-empty continuous subarrays. Write an algorithm to minimize the largest sum among these m subarrays.

public class Solution {

    int[] sums;
    int[][] memo;

    int n;
    public int splitArray(int[] nums, int m) {

        n = nums.length;
        sums = new int[n];
        memo = new int[n][m + 1];

        sums[n - 1] = nums[n - 1];
        for(int i = n - 2; i >= 0; i --)
            sums[i] = nums[i] + sums[i + 1];

        return dfs(nums, 0, m);
    }

    public int dfs(int[] nums, int start, int m) {

        if(m == 1)
            return sums[start];

        if(memo[start][m] > 0)
            return memo[start][m];

        int min = Integer.MAX_VALUE;
        int sum = 0;

        for(int i = start; i <= n - m; i ++){
            sum += nums[i];
            min  = Math.min(min, Math.max(sum, dfs(nums, i + 1, m - 1)));
        }


        memo[start][m] = min;
        return min;
    }
}

results matching ""

    No results matching ""