作為開發人員,我們經常被要求查找數組中是否存在總和為 0 的子數組。這可以通過使用前綴和的概念來完成。我們將跟蹤到目前為止看到的子數組元素的總和并將其存儲在哈希圖中。如果之前看到了sum,則說明具有該sum的子數組存在并且sum為0。我們將使用迄今為止看到的元素總和不斷更新哈希圖。這樣我們就可以判斷數組中是否存在sum為0的子數組。
方法
將變量“sum”初始化為 0,并將“hash_map”對象初始化為將總和值存儲為鍵,將其索引存儲為值。
循環遍歷給定數組,對于每個元素 –
將當前元素添加到總和中。
如果當前總和為 0 或已存在于 hash_map 中,則返回 true,因為存在總和為 0 的子數組。
否則,將總和值及其索引插入到 hash_map 中。
如果循環完成,則返回 false,因為不存在總和為 0 的子數組。
hash_map 有助于跟蹤累積和并確定是否存在重復和。
如果找到重復和,則意味著這兩個和之間存在一個和為 0 的子數組。
此方法的時間復雜度為 O(n),其中 n 是給定數組中的元素數量。
示例
這是一個完整的 JavaScript 程序示例,用于查找是否存在總和為 0 的子數組 –
function hasZeroSum(arr) { let sum = 0; let set = new Set(); for (let i = 0; i < arr.length; i++) { sum += arr[i]; if (set.has(sum)) return true; set.add(sum); } return false; } const arr = [4, 2, -3, 1, 6]; console.log(hasZeroSum(arr));
登錄后復制
說明
函數hasZeroSum采用數組arr作為其參數。
我們初始化兩個變量 sum和set。 sum 變量用于跟蹤子數組中元素的當前總和,set 用于存儲之前看到的總和。
李>
然后我們使用 for 循環來迭代數組的元素。
在每次迭代中,我們將當前元素添加到 sum 中,并檢查 set 是否已包含 sum 的值。
如果sum的值已經在集合中,表示從第一次出現該sum開始到當前元素結束的子數組總和為 0,因此我們返回 true。
如果sum的值不在集合中,我們將其添加到集合中。
如果我們迭代了整個數組并且沒有返回 true,則意味著不存在總和為 0 的子數組,因此我們返回 false。
最后,我們使用示例數組測試該函數并將結果記錄到控制臺。
以上就是JavaScript 程序查找是否存在總和為 0 的子數組的詳細內容,更多請關注www.92cms.cn其它相關文章!