410. Split Array Largest Sum

https://leetcode.com/problems/split-array-largest-sum/

solution

  • Binary search

class Solution:
    def splitArray(self, nums: List[int], k: int) -> int:
        left = max(nums)
        right = sum(nums)

        while left < right:
            mid = (left + right) // 2
            if self.check(nums, mid, k):
                right = mid
            else:
                left = mid + 1
        return left

    def check(self, nums, mid, k):
        count = 1
        cur_sum = 0
        for num in nums:
            cur_sum += num
            if cur_sum > mid:
                count += 1
                cur_sum = num

                if count > k:
                    return False
        return True

时间复杂度:O() 空间复杂度:O()

  • dynamic programming

follow up

  • 二分搜索范围: [max(nums), sum(nums)]

    • 类似背包搜索的范围,从每一个可选中检查

378. Kth Smallest Element in a Sorted Matrix

668. Kth Smallest Number in Multiplication Table

1011. Capacity To Ship Packages Within D Days

*1231. Divide Chocolate

875. Koko Eating Bananas

*774. Minimize Max Distance to Gas Station

1201. Ugly Number III

  • brute force

  • binary search

  • heap

1482. Minimum Number of Days to Make m Bouquets

*1891. Cutting Ribbons

2141. Maximum Running Time of N Computers

Last updated