这道题是前缀和+哈希表
首先求出前缀和,然后建立哈希表
哈希表的键是余数,值是下标,如果在前缀和中有两个数的余数相同,说明这两个数相减绝对能被k整除。
class Solution:
def checkSubarraySum(self, nums: List[int], k: int) -> bool:
# for i in range(len(nums)):
# if i >= 1:
# if total[i]%k == 0:
# return True
# for j in range(i+2, len(nums)):
# if (total[j] - total[i])%k == 0:
# return True
# return False
total = list(accumulate(nums))
hashmap = {}
hashmap[0] = -1
for i in range(len(total)):
sums = total[i]%k
if sums in hashmap:
if i - hashmap[sums] > 1:
return True
else:
hashmap[sums] = i
return False