【LeetCode】【算法】560. 和为 K 的子数组
LeetCode 560. 和为 K 的子数组
题目描述
给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。
子数组是数组中元素的连续非空序列。
思路
思路:前缀和
- 定义数组
preSum[nums.length+1]
,在里面计算nums
数组每一位置上和前面所有数的累加和 - 嵌套循环遍历
preSum
数组,每次用preSum[right]-preSum[left]
以计算区间left~right
的和,若满座条件,则子数组个数+1
代码
class Solution {
public int subarraySum(int[] nums, int k) {
int len = nums.length;
int[] preSum = new int[len + 1];
for (int i = 0; i < len; i++) {
preSum[i + 1] = preSum[i] + nums[i];
}
int count = 0;
for (int left = 0; left < len; left++) {
for (int right = 0; right < len; right++) {
if (preSum[right + 1] - preSum[left] == k) {
count++;
}
}
}
return count;
}
}