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;}
}