560. 和为 K 的子数组
给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的连续子数组的个数 。
示例 1:
输入:nums = [1,1,1], k = 2
输出:2
示例 2:
输入:nums = [1,2,3], k = 3
输出:2
思路
- 暴力解法
双重循环,第一层循环确定i,第二层循环确定j,寻找区间[i, j]和为k的解
时间复杂度: O(n²)
空间复杂度:O(1)
- 前缀和 + 暴力解法
区间和/子数组和,想到前缀和,双重循环在前缀和数组中寻找区间和为k的解
- 前缀和 + HashMap(待补充)
最终代码
思路二代码(前缀和+暴力解法)
class Solution {
public int subarraySum(int[] nums, int k) {
if(nums == null || nums.length == 0) {
return 0;
}
int result = 0;
int[] prefixSum = new int[nums.length + 1];
for(int i = 0; i < nums.length; i++) {
prefixSum[i + 1] = prefixSum[i] + nums[i];
}
for(int i = 0; i < nums.length; i++) {
for(int j = i; j < nums.length; j++) {
if(prefixSum[j + 1] - prefixSum[i] == k) {
result += 1;
}
}
}
return result;
}
}