给定一个整数数组 nums 和一个整数 k,返回总和等于 k ​​的连续子数组的总数

Posted

技术标签:

【中文标题】给定一个整数数组 nums 和一个整数 k,返回总和等于 k ​​的连续子数组的总数【英文标题】:Given an array of integers nums and an integer k, return the total number of continuous subarrays whose sum equals to k 【发布时间】:2021-01-27 08:45:25 【问题描述】:
def subarraySum(self, nums: List[int], k: int) -> int:
    count = 0
    target = k
    self.cal(nums,target,count,k)
    return count
def cal(nums,target, count,k):
    if target == 0:
        count = count+1
        target = k
        return count,target
    if target<0:
        return 
        
    for i in range(len(nums)):
        self.cal(nums[:i]+nums[i+1:],target-nums[i],count,k)

''' 这里当目标

【问题讨论】:

另一个 Leetcode 问题?为算法添加标签会有所帮助。那么你的问题是什么? (你应该原始源链接) 这是 Leetcode #560 - leetcode.com/problems/subarray-sum-equals-k 【参考方案1】:

您可以尝试使用prefix 思想和defaultdict() 更优雅有效地解决这个子数组求和问题。这取决于prefix sum 的想法,代码很容易理解,您可以尝试使用不同的数据运行它。在dc[v] 中,我们存储所有前缀和,即数字。上一个以值 v 为总和前缀。然后它循环和数组以查看是否有新的 num。 wcoming 的值满足w-v equal k 然后我们得到一个新的计数(对)。

from collections import defaultdict
class Solution:
    def subarraySum(self, nums: List[int], k: int) -> int:
        dc = defaultdict(int)
        sum_ = 0
        dc[0] = 1
        result = 0
        for n in nums:
            sum_ += n
            if sum_ - k in dc:
                result += dc[sum_ - k]
            dc[sum_] += 1
        return result

【讨论】:

以上是关于给定一个整数数组 nums 和一个整数 k,返回总和等于 k ​​的连续子数组的总数的主要内容,如果未能解决你的问题,请参考以下文章

实现一个函数, // 判断一个给定整数数组中是否存在某两个元素之和恰好等于一个给定值 k, // 存在则返回 true,否则返回 false。

2021-07-16:三个无重叠子数组的最大和。给定数组 nums 由正整数组成,找到三个互不重叠的子数组的最大和。每个子数组的长度为k,我们要使这3*k个项的和最大化。返回每个区间起始索引的列表(索

和为K的子数组

和为K的子数组

2021-11-12:前 K 个高频元素。给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。提示:1 <= nums.length <=

JavaScript之给定一个整数数组nums和一个整数目标值target,在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标