# Split Array Largest Sum 410 ###### tags: `leetcode`,`binarySearch`,`hard` >ref: https://leetcode.com/problems/split-array-largest-sum/ > 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 >Constraints: 1 <= nums.length <= 1000 0 <= nums[i] <= 106 1 <= m <= min(50, nums.length) >1.timeResolution:O(log N)\*O\(log(sum_of_array-max)\) >2. DP待補 [DP](https://leetcode.com/problems/split-array-largest-sum/discuss/931979/Detailed-and-clean-O(n)-time-solution-with-NO-log(sum)) ```java= public int splitArray(int[] nums, int m) { // boundary btw 1. the max in nums and 2. sum of nums int left = 0; int right = 0; for (int num : nums) { left = Math.max(left, num); right += num; } while (left < right) { int med = left + (right - left) / 2; int count = 1; int sum = 0; loop: for (int num : nums) { sum += num; if (sum > med) { count++; sum = num; } if (count > m) { break loop; } } if (count > m) { left = med + 1; } else { right = med; //med is examized. } } return left; } ```