523. Continuous Subarray Sum
要求连续子数组和为目标数字的倍数
解法一
遍历所有可能的子数组
解法二
任意连续子数组的和都可以使用从0开始的两个子数组相减得到
使用上面的结论,可以依次记录从0开始的子数组和摸目标数字的余数,需要注意的是:
- 除余0以外,余数相同的两个子数组相减,即得到需要的连续子数组;
- 子数组长度需要大于1;
- 余0是唯一可以前两个元素相加符合要求的,需要补充这个条件
class Solution:
def checkSubarraySum(self, nums: List[int], k: int) -> bool:
if len(nums) <= 1:
return False
d = {0: -1}
s = 0
for i in range(len(nums)):
s += nums[i]
if k != 0:
s = s % k
if s in d:
if i - d[s] > 1:
return True
else:
d[s] = i
return False