前言
Weekly Contest 108的第二题 和相同的二元子数组:
在由若干
0
和1
组成的数组A
中,有多少个和为S
的非空子数组。
示例:输入:A = [1,0,1,0,1], S = 2 输出:4 解释: 如下面黑体所示,有 4 个满足题目要求的子数组: [1,0,1,0,1] [1,0,1,0,1] [1,0,1,0,1] [1,0,1,0,1]
提示
A.length <= 30000
0 <= S <= A.length
A[i]
为0
或1
解题思路
本题其实十分简单,我选择使用的是穷举法完成的。
已知数组由 0
和1
组成,只需要一个双重for
循环就可以完成本题了。
实现代码
/**
* 930. 和相同的二元子数组
* @param A
* @param S
* @return
*/
public int numSubarraysWithSum(int[] A, int S) {
//和相同的二元子数组个数
int result=0;
for(int i=0;i<A.length;i++){
int total=0;
for(int j=i;j<A.length;j++){
total+=A[j];
if(total==S){//判断累加后的值是否为期待值,若是则子数组个数自增
++result;
}
if(total>S){//大于期待值直接中断循环
break;
}
}
}
return result;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。