题目描述:
给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。
示例 1 :
输入:nums = [1,1,1], k = 2
输出: 2 , [1,1] 与 [1,1] 为两种不同的情况说明 : 数组的长度为 [1, 20,000]。 数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7,1e7]
题目很容易理解,类似于从所有的排列组合里面,找到符合要求的部分.
一.暴力穷举
暴力法是非常容易想到的, 由于子数组是连续的,只要双重循环,就可以组合出所有的子数组,然后在此基础上去判断是否满足条件,统计数量即可.
class Solution {
public int subarraySum(int[] nums, int k) {
int count=0;
for(int i=0;i<nums.length;i++){
int res=k-nums[i];//用减法代替加和判断
if(res==0){
count++;
}
//满足条件之后不能退出循环,要继续向后遍历
for(int j=i+1;j<nums.length;j++){
res=res-nums[j];
if(res==0){
count