假设我们有一个称为nums的数字列表,另一个值为k。我们必须将列表分成k个连续的组。最小的组是所有组中总和最小的组。因此,找到最小组的最大可能值。
因此,如果输入像nums = [2,6,4,5,8] k = 3,那么输出将是8,因为我们可以将列表分为三类:[2,6],[4 ,5],[8]。因此,最小组的总和为8。
让我们看下面的实现以更好地理解-
class Solution: def solve(self, nums, k): def is_divisible(target): if target <= 1: return True num_chunks = 0 current_sum = 0 for x in nums: current_sum += x if current_sum >= target: current_sum = 0 num_chunks += 1 if num_chunks == k: return True return False left = 1 right = sum(nums) // k + 1 while left < right - 1: mid = (left + right) // 2 if is_divisible(mid): left = mid else: right = mid return left ob = Solution()nums = [2, 6, 4, 5, 8] k = 3 print(ob.solve(nums, k))
[2, 6, 4, 5, 8], 3输出结果
8