top of page
Search

# Split Array Largest Sum

Updated: Mar 16, 2021

Given an array nums 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.

Example 1:

```Input: nums = [7,2,5,10,8], m = 2
Output: 18
Explanation:
There are four ways to split nums into two subarrays.
The best way is to split it into [7,2,5] and [10,8],
where the largest sum among the two subarrays is only 18.

```

Example 2:

```Input: nums = [1,2,3,4,5], m = 2
Output: 9

```

Example 3:

```Input: nums = [1,4,4], m = 3
Output: 4

```

Constraints:

• 1 <= nums.length <= 1000

• 0 <= nums[i] <= 106

• 1 <= m <= min(50, nums.length)

Solution:

```class Solution {
public int splitArray(int[] nums, int m) {
int left=0, right =0,mid;
for(int i:nums)
{
left=Math.max(left,i);
right+=i;
}
while (left < right)
{
mid = left + (right - left) / 2;
if(cansplit(mid,nums,m))
right = mid;
else
left = mid + 1;
}

return left;
}
private boolean cansplit(int sum,int[] nums,int m)
{
int count = 1,total = 0;
for (int n:nums)
{
total += n;
if (total > sum)
{
total = n;
count++;
}
if (count > m)
return false;
}
return true;
}
}```