给你一个二元数组 nums ,和一个整数 goal ,请你统计并返回有多少个和为 goal 的 非空 子数组。
子数组 是数组的一段连续部分。
示例 1:
输入:nums = [1,0,1,0,1], goal = 2
输出:4
解释:
有 4 个满足题目要求的子数组:[1,0,1]、[1,0,1,0]、[0,1,0,1]、[1,0,1]
示例 2:
输入:nums = [0,0,0,0,0], goal = 0
输出:15
根据题目知道
只有0 和 1 两个元素
需要知道各种子数组(连续不断)之和与目标值goal相等
那就暴力破解吧
遍历数组
以第i元素为基础
如果nums[i] == goal, 计数 count 加1
如果nums[i] > goal, 直接检查下一个元素
子循环遍历第j=i+x之后的元素, 累加[i, j]区间的元素得到结果sum
如果sum == goal, 计数 count 加1
如果sum > goal, 跳出子循环
如果sum < goal, 继续累加, 直到数组结尾
直到遍历完所有元素
返回计算结果count
class Solution {
public int numSubarraysWithSum(int[] nums, int goal) {
int count=0,sum=0;
for(int i=0;i<nums.length;i++){
sum=nums[i];
if(sum==goal){
count++;
}else if(sum>goal){
continue;
}
for(int j=i+1;j<nums.length;j++){
sum+=nums[j];
if(sum==goal){
count++;
}else if(sum>goal){
break;
}
}
}
return count;
}
}