首页 文章资讯内容详情

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

2026-06-03 1 花语

假设我们有一个包含正值的列表,称为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