DAY5 子数组和为目标倍数

523. Continuous Subarray Sum

要求连续子数组和为目标数字的倍数

解法一

遍历所有可能的子数组

解法二

任意连续子数组的和都可以使用从0开始的两个子数组相减得到
使用上面的结论,可以依次记录从0开始的子数组和摸目标数字的余数,需要注意的是:

  1. 除余0以外,余数相同的两个子数组相减,即得到需要的连续子数组;
  2. 子数组长度需要大于1;
  3. 余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

你可能感兴趣的:(DAY5 子数组和为目标倍数)