Leetcode 523. Continuous Subarray Sum

Posted SnailTyan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode 523. Continuous Subarray Sum相关的知识,希望对你有一定的参考价值。

文章作者:Tyan
博客:noahsnail.com  |  CSDN  |  简书

1. Description

2. Solution

**解析:**Version 1,使用前缀和来解决,遍历数组,求前缀和,求前缀和与k的余数,余数在字典中存在时,则意味着当前前缀和减去之前的前缀和等于k的倍数,此时计算两个前缀和的长度差,如果大于等于2,则返回True,如果余数不存在,则将余数保存在字典中并记录其索引位置。由于余数相同时不会更新索引,因此,字典中前缀和余数相同时,保存的是最靠前的位置。注意,假设第一个数就等于k的倍数,此时数组中没有余数0的位置,因此stat[0]=-1,这样计算的长度才不会错。

  • Version 1
class Solution:
    def checkSubarraySum(self, nums: List[int], k: int) -> bool:
        n = len(nums)
        total = 0
        stat = {}
        stat[0] = -1
        for i in range(n):
            total += nums[i]
            remainder = total % k
            if remainder in stat:
                length = i - stat[remainder]
                if length > 1:
                    return True
            else:
                stat[remainder] = i
        return False

Reference

  1. https://leetcode.com/problems/continuous-subarray-sum/

以上是关于Leetcode 523. Continuous Subarray Sum的主要内容,如果未能解决你的问题,请参考以下文章

leetcode 523. Continuous Subarray Sum

LeetCode 523: Continuous Subarray Sum

Leetcode 523. Continuous Subarray Sum

523. Continuous Subarray Sum

LeetCode:Continuous Subarray Sum

Leetcode523. 连续的子数组和