假设我们有一个称为nums的非负数和另一个正数k的列表。我们必须检查是否存在长度至少为2的子列表,且其总和为k的倍数。
因此,如果输入像nums = [12,6,3,4] k = 5,则输出将为True,因为子列表为[12,3]的总和为15,可以被5整除。
为了解决这个问题,我们将遵循以下步骤-
和:= 0
m:=新映射
m [0]:= -1
对于范围从0到nums的i,执行
m [sum]:= i
如果i-m [sum]> = 2,则
返回True
sum:= sum + nums [i]
sum:= sum mod k
如果总和存在于m中,则
除此以外,
返回False
让我们看下面的实现以更好地理解-
class Solution: def solve(self, nums, k): sum = 0 m = {} m[0] = -1 for i in range(0, len(nums)): sum += nums[i] sum %= k if sum in m: if i - m[sum] >= 2: return True else: m[sum] = i return False ob = Solution()nums = [12, 6, 3, 4] k = 5 print(ob.solve(nums, k))
[12, 6, 3, 4], 5
输出结果
True