题意为判断一个数组中是否存在子串,使得子串和为k的倍数
解题思路是:对数组进行遍历,计算前i项和并且记录第一次出现模k余m的位置dp[m],若dp中已经存在键为m的值,则比较i和dp[m],若相差大于1则说明存在这样的子串。
代码如下:
class Solution(object):
def checkSubarraySum(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: bool
"""
dp = {}
dp[0] = -1
sum = 0
m = -1
for i, num in enumerate(nums):
sum += num
if k==0: m = sum
else: m = sum % k
if dp.get(m)==None: dp[m] = i
elif i - dp[m] > 1: return True
return False