美文网首页
560. 和为 K 的子数组(中等)-子串

560. 和为 K 的子数组(中等)-子串

作者: MatrixZ | 来源:发表于2023-05-19 13:09 被阅读0次

给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的连续子数组的个数 。

分析

  • 需要想到累计和,还有能边遍历边计算,当发生累计和以及累计和减去k的值也在字典中时开始计算
  • 注意陷阱,就是开始需要初始化一个累计和为0的个数为1
  • 并且是要用字典记录,key是累计和,value是对应的个数
class Solution:
    def subarraySum(self, nums: List[int], k: int) -> int:
        # 计算累计和
        # 边走边计算对应的sum_all -k 是否已经存在,并且需要用字典记录,而不是集合,因为前面有可能有多个相同的sum_all
        sum_to_count = {}
        # 重大陷阱,需要定义sum为0时值为1,因为有可能包含第一个元素,这样也需要有个被减数
        sum_to_count[0] = 1
        n = len(nums)
        sum_all = 0
        res = 0
        for n in nums:
            sum_all += n
            if sum_all - k in sum_to_count:
                res += sum_to_count[sum_all - k]
            
            if sum_all in sum_to_count:
                sum_to_count[sum_all] += 1
            else:
                sum_to_count[sum_all] = 1
        
        return res

相关文章

  • leetcode 560. 和为K的子数组

    560. 和为K的子数组 给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。示例 ...

  • 前缀和

    560.和为K的子数组 算出一共有几个和为 k 的子数组。这里用到了前缀和数组。 注意以下几点: 前缀和数组第0号...

  • 那些小而美的算法技巧:前缀和/差分数组

    读完本文,你可以去力扣拿下如下题目: 560.和为K的子数组[https://leetcode-cn.com/pr...

  • 560. 和为K的子数组

    【Description】给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。 示例...

  • 560.和为K的子数组

    和为K的子数组 题目 给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。 示例 1...

  • 560.和为K的子数组

    思路: 用sum[i]表示a[0]~a[i]的和,若sum[j]-sum[i]==k的话,则计数+1 注意: 若s...

  • 560. 和为K的子数组

    给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。 示例 1 : 输入:nums ...

  • 560. 和为 K 的子数组

    解法 暴力解法,双重遍历。 前缀和解法,对于连续类树和数组都很好用

  • 560. 和为 K 的子数组

    一 题目 二 思路: 1.暴力枚举--时间复杂度N2,不推荐,由于存在Nums[i]<0,因此我们需要从每个位置开...

  • LeetCode 560. 和为 K 的子数组

    题目 给你一个整数数组 nums 和一个整数 k ,请你统计并返回该数组中和为 k 的连续子数组的个数。 例:输入...

网友评论

      本文标题:560. 和为 K 的子数组(中等)-子串

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