要求:
给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。
示例:
输入:nums = [1,1,1], k = 2
输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。
思路:
比较基础的做法吧:嵌套两次循环遍历
- 先把数组遍历一次,创建一个sum数组与之对应,sum[0]为0,sum[1]是前一个数的和,sum[2]是前两个数的和,依此类推,sum[n]是前n个数的和,所以sum数组的长度是
nums.length+1 - 然后将i置为0,从0开始不断往后查找,连续子数组和为k,即
sum[j]-sum[i]==k即可,所以说两层循环就够了呀。
代码:
class Solution {
public int subarraySum(int[] nums, int k) {
int len = nums.length;
int[] sum = new int[len+1];
sum[0] = 0;
for (int i = 0; i < len; i++) {
sum[i+1] = nums[i] + sum[i];
}
int count = 0;
for (int i = 0; i < len; i++) {
for (int j = i; j < len; j++) {
if (sum[j+1] - sum[i] == k) {
count++;
}
}
}
return count;
}
}