找出Python中最大的K可整除子序列和的程序

假设我们给出了一个非负数的列表,以及一个正值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