LeetCode——930. 和相同的二元子陣列(JavaScript)
阿新 • • 發佈:2018-11-23
在由若干 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; };