📅  最后修改于: 2023-12-03 15:09:37.051000             🧑  作者: Mango
给定一个非负整数数组和一个正整数 k,将数组分隔成 k 个非空的子集,使得这 k 个子集的和的最大值最小,输出这个最小的和。
这道题是一道非常经典的贪心算法问题,我们使用二分搜索和贪心算法结合的方法来解决这个问题。具体思路如下:
class Solution:
def splitArray(self, nums: List[int], k: int) -> int:
left, right = max(nums), sum(nums)
while left <= right:
mid = left + (right - left) // 2
if self.check(nums, mid, k):
right = mid - 1
else:
left = mid + 1
return left
def check(self, nums, target, k):
cnt, cur_sum = 0, 0
for num in nums:
if num > target:
return False
if cur_sum + num > target:
cnt += 1
cur_sum = num
else:
cur_sum += num
cnt += 1
return cnt <= k