Given an array of integers nums
and an integer k
, return the total number of subarrays whose sum equals to k
.
Example 1:
Input: nums = [1,1,1], k = 2 Output: 2
Example 2:
Input: nums = [1,2,3], k = 3 Output: 2
Constraints:
1 <= nums.length <= 2 * 10^4
-1000 <= nums[i] <= 1000
-10^7 <= k <= 10^7
题目给定一个整型数组nums和一个整数k,问一共有几个子数组,它们的和等于k。
很显然可以用暴力解法,算出每个子数组的和,判断和是否等于k。也很显然,暴力解法不是出题者所要的,一定会有更优解。
只要是关于子数组和的问题,我们需要很快地想到前缀和的概念,所谓前缀和就是数组中的每一个位置到数组头的所有元素的和。有了每个位置的前缀和,就可以快速的算出任意一个子数组的和,对于一个子数组,它的和就是子数组结尾位置的前缀和减去第一个位置的前一个位置的前缀和。
有了前缀和数组之后,