假设我们给出了一个非负数的列表,以及一个正值k。我们必须找到数字的最大和子序列,以使和可被k整除。
因此,如果输入为nums = [4、6、8、2],k = 2,则输出为20。
整个数组的总和为20,可被2整除。
为了解决这个问题,我们将遵循以下步骤-
numsSum:=输入列表nums中的值之和
余数:= numsum mod k
如果余数等于0,则
返回numsSum
排序列表编号
对于每个数字组合tpl(以num为单位)。做
返回numsSum-subSeqSum
subSeqSum:= sum(tpl)
如果subSeqSum mod k与余数相同,则
返回0
让我们看下面的实现以更好地理解-
from itertools import chain, combinations class Solution: def solve(self, nums, k): numsSum = sum(nums) remainder = numsSum % k if remainder == 0: return numsSum nums.sort() for tpl in chain.from_iterable(combinations(nums, r) for r in range(1, len(nums) + 1)): subSeqSum = sum(tpl) if subSeqSum % k == remainder: return numsSum − subSeqSum return 0 ob1 = Solution() print(ob1.solve([4, 6, 8, 2], 2))
[4, 6, 8, 2], 2输出结果
20