Suppose we have a list of numbers called nums and another value k. We have to split the list into k contiguous groups. The smallest group is the one whose sum is the smallest out of all the groups. So find the maximum possible value of the smallest group.
So, if the input is like nums = [2, 6, 4, 5, 8] k = 3, then the output will be 8, as we can split the list into three groups like: [2, 6], [4, 5], [8]. So the minimum group has sum 8.
To solve this, we will follow these steps −
Define a function is_divisible() . This will take target
if target <= 1, then
return True
num_chunks := 0, current_sum := 0
for each x in nums, do
current_sum := current_sum + x
if current_sum >= target, then
current_sum := 0
num_chunks := num_chunks + 1
if num_chunks is same as k, then
return True
return False
From the main method do the following −
left := 1
right := (sum of all elements in nums) / k + 1
while left < right - 1, do
mid :=(left + right) / 2
if is_divisible(mid) is true, then
left := mid
otherwise,
right := mid
return left
Example (Python)
Let us see the following implementation to get better understanding −
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))
Input
[2, 6, 4, 5, 8], 3
Output
8