Leetcode: 410. Split Array Largest Sum

Problem Statement

class Solution:
    def splitArray(self, nums: List[int], M: int) -> int:
        N = len(nums)
        s = max(nums)
        e = sum(nums)

        def valid(m):
            cnt = i = cur = 0
            while i < N:
                if cur + nums[i] <= m:
                    cur += nums[i]
                else:
                    cur = nums[i]
                    cnt += 1
                i += 1
            return cnt < M

        while s < e:
            m = s + (e - s) // 2
            if valid(m):
                e = m
            else:
                s = m + 1
        return s