LeetCode in Kotlin

410. Split Array Largest Sum

Hard

Given an integer array nums and an integer k, split nums into k non-empty subarrays such that the largest sum of any subarray is minimized.

Return the minimized largest sum of the split.

A subarray is a contiguous part of the array.

Example 1:

Input: nums = [7,2,5,10,8], k = 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], k = 2

Output: 9

Explanation: There are four ways to split nums into two subarrays. The best way is to split it into [1,2,3] and [4,5], where the largest sum among the two subarrays is only 9.

Constraints:

Solution

class Solution {
    fun splitArray(nums: IntArray, m: Int): Int {
        var maxVal = 0
        var minVal = nums[0]
        for (num in nums) {
            maxVal += num
            minVal = Math.max(minVal, num)
        }
        while (minVal < maxVal) {
            val midVal = minVal + (maxVal - minVal) / 2
            // if we can split, try to reduce the midVal so decrease maxVal
            if (canSplit(midVal, nums, m)) {
                maxVal = midVal
            } else {
                // if we can't split, then try to increase midVal by increasing minVal
                minVal = midVal + 1
            }
        }
        return minVal
    }

    private fun canSplit(maxSubArrSum: Int, nums: IntArray, m: Int): Boolean {
        var currSum = 0
        var currSplits = 1
        for (num in nums) {
            currSum += num
            if (currSum > maxSubArrSum) {
                currSum = num
                currSplits++
                // if maxSubArrSum was TOO high that we can split the array into more that 'm' parts
                // then its not ideal
                if (currSplits > m) {
                    return false
                }
            }
        }
        return true
    }
}
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy