1. 程式人生 > >LeetCode——930. 和相同的二元子陣列(JavaScript)

LeetCode——930. 和相同的二元子陣列(JavaScript)

在由若干 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


思路:

這裡只記錄優秀的方法(借鑑)

使用一個變數 sum 來儲存從第一個元素到目前為止的元素之和;
使用一個變數 result 來儲存結果;
使用一個數組 arr,其索引為 i 的元素來儲存從第一個元素開始和為 i 的子陣列個數。(除了第一個元素,arr[0] = 1)

迴圈遍歷陣列 A,將當前的 num(A中的元素)加入 sum 總和中,如果 sum >= S,說明第一個元素到當前元素的和已經超過S,那麼在 arr 中查詢索引為(sum-S)的元素,加入到result裡面。

/**
 * @param {number[]} A
 * @param {number} S
 * @return {number}
 */
var numSubarraysWithSum = function(A, S) {
  let result = 0;
  let sum = 0;
  let arr = Array(A.length + 1).fill(0)
  arr[0] = 1
  for (let num of A) {
    sum += num;
    if (sum >= S) {
      result += arr[sum - S]
    }
    arr[sum] += 1
  }
  return result;
};