在Python中查找可以被删除的最小子列表的长度以使总和可被k整除的程序

假设我们有一个包含正值的列表,称为 nums,并且还有一个正数 k。我们必须找到可以从 nums 中删除的最短子列表(可能为空)的长度,使得剩余元素的总和可以被 k 整除。但是我们不能删除整个列表。如果没有要删除的子列表,则返回-1。

因此,如果输入类似于 nums = [5,8,6,3] k = 8,那么输出将为 1,因为 [5,8,6,3] 的当前元素之和为 22。如果我们删除长度为 1 的子列表 [6],则 sum 为 16,可被 8 整除。

示例

让我们看看以下实现以获得更好的理解 -

def solve(nums, k):
   rem = (sum(nums) + k) % k
   if rem == 0:
      return 0
   n, presum = len(nums), 0
   mp = {0: -1}
   res = n
   for i in range(n):
      presum += nums[i]
      m = (presum + k) % k
      mp[m] = i
      if (m - rem + k) % k in mp:
         res = min(res, i - mp[(m - rem + k) % k])
   return res if res != n else -1

nums = [5,8,6,3]
k = 8
print(solve(nums, k))

输入

[5,8,6,3], 8
输出结果
1

猜你喜欢