1. 程式人生 > 其它 >930. 和相同的二元子陣列 字首和

930. 和相同的二元子陣列 字首和

給你一個二元陣列 nums ,和一個整數 goal ,請你統計並返回有多少個和為 goal 的 非空 子陣列。

子陣列 是陣列的一段連續部分。

示例 1:

輸入:nums = [1,0,1,0,1], goal = 2
輸出:4
解釋:
如下面黑體所示,有 4 個滿足題目要求的子陣列:
[1,0,1,0,1]
[1,0,1,0,1]
[1,0,1,0,1]
[1,0,1,0,1]
示例 2:

輸入:nums = [0,0,0,0,0], goal = 0
輸出:15

提示:

1 <= nums.length <= 3 * 104
nums[i] 不是 0 就是 1
0 <= goal <= nums.length

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/binary-subarrays-with-sum
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

class Solution {
public:
    int numSubarraysWithSum(vector<int>& nums, int goal) {
        int sum = 0;
        map <int, int> cnt;
        int ans = 0;

        for (int num : nums) {
            cnt[sum]++;
            sum += num;
            ans += cnt[sum - goal];
        }

        return ans;
    }
};