930. Binary Subarrays With Sum(python+cpp)

题目:

In an array A of 0s and 1s, how many non-empty subarrays have sum S?
Example 1:

Input: A = [1,0,1,0,1], S = 2 
Output: 4 

Explanation: The 4 subarrays are bolded below:

[1,0,1,0,1]
[1,0,1,0,1]
[1,0,1,0,1]
[1,0,1,0,1]

Note:
A.length <= 30000
0 <= S <= A.length
A[i]is either 0 or 1.

解释:
维护一个一直在变化的hashMap。subarray求和,思想和560. Subarray Sum Equals K(python+cpp)是一样的。但是这个题目的一个特点是所有的元素只有01,所以总和的范围是0~len(nums),所以可以用一个长度为len(nums)+1的数组来代替字典,速度会更快,注意初始化的时候preSumCount[0]=1
python代码:

class Solution:
    def numSubarraysWithSum(self, A, S):
        """
        :type A: List[int]
        :type S: int
        :rtype: int
        """
        preSumCount=[0]*(len(A)+1)
        preSumCount[0]=1
        preSum=0
        result=0
        for a in A:
            preSum+=a;
            tmp=preSum-S
            if tmp>=0:
                result+=preSumCount[tmp]
            preSumCount[preSum]+=1
        return result

c++代码:

class Solution {
public:
    int numSubarraysWithSum(vector<int>& A, int S) {
        vector<int> preSumCount(A.size()+1,0);
        preSumCount[0]=1;
        int preSum=0;
        int result=0;
        for (auto a:A)
        {
            preSum+=a;
            int tmp=preSum-S;
            if (tmp>=0)
                result+=preSumCount[tmp];
            preSumCount[preSum]+=1;
        }
        return result;
    }
};

总结:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值