美文网首页Leetcode
Leetcode 523. Continuous Subarra

Leetcode 523. Continuous Subarra

作者: SnailTyan | 来源:发表于2021-09-02 09:18 被阅读0次

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

    1. Description

    Continuous Subarray Sum

    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 Subarra

        本文链接:https://www.haomeiwen.com/subject/waabvltx.html