和为K的子数组

Posted 算法与编程之美

tags:

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

给定一个数组在给定一个整数,我们如何找出数组中和为这个整数的子数组呢?

问题

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

方法

前缀和:

前缀和是一种预处理,用于降低查询时的时间复杂度。举个例子:给定n个整数,然后进行n次询问,每次询问求一个区间内值的和。

创建一个字典dict,从第一位依次求和,即第一次求和是第一个数,第二次求和是第一和第二个数的和,第三次求和是一到三位数的和,以此类推。计算每一次的和出现次数,在字典中,和设为value,出现的次数设为key。在计算时,用每一次的和cur-sum减去k,再查找字典dict,中cur-sum - k值出现的次数,累加并返回,即为和为k 的连续子数组的个数。

通过实验、实践等证明提出的方法是有效的,是能够解决开头提出的问题。

代码清单 1

classs Solution:
def subrraySum(self,nums:List[int],k:int) -> int:
   cur_sum=0
   dict=
   dict[0]=1
   count=0
   for num in nums:
       cur_sum+=num
       if cur_sum - k in dict:
           count+=dict[cur_sum - k]
       if cur_sum in dict:
dict[cur_sum]+=1
           else:
dict[cur_sum]+=1
       return count

结语

针对和为K的子数组问题,提出前缀和的方法,证明该方法是有效的,是否还有其他方法呢?是我们值得思考的,必然存在其他方法也能去解决,需要自己不断探索。

以上是关于和为K的子数组的主要内容,如果未能解决你的问题,请参考以下文章

和为K的子数组--力扣

560. 和为 K 的子数组

560. 和为 K 的子数组

LeetCode-560. 和为 K 的子数组

560. 和为 K 的子数组

和为k的子数组