Python程序:查找最大K可整除子序列和
假设我们给定一个非负数列表和一个正值k。我们必须找到一个数字的最大和子序列,使得该和可以被k整除。
因此,如果输入类似于 nums = [4, 6, 8, 2],k = 2,则输出将为 20。
整个数组的和是 20,可以被 2 整除。
为了解决这个问题,我们将遵循以下步骤:
numsSum := 输入列表 nums 中值的总和
remainder := numsSum mod k
如果余数与 0 相同,则
返回 numsSum
对列表 nums 进行排序
对于 nums 中的每个数字组合 tpl
subSeqSum := sum(tpl)
如果 subSeqSum mod k 与余数相同,则
返回 numsSum − subSeqSum
返回 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
广告