作為開發(fā)人員,我們經(jīng)常被要求查找數(shù)組中是否存在總和為 0 的子數(shù)組。這可以通過使用前綴和的概念來完成。我們將跟蹤到目前為止看到的子數(shù)組元素的總和并將其存儲(chǔ)在哈希圖中。如果之前看到了sum,則說明具有該sum的子數(shù)組存在并且sum為0。我們將使用迄今為止看到的元素總和不斷更新哈希圖。這樣我們就可以判斷數(shù)組中是否存在sum為0的子數(shù)組。
方法
將變量“sum”初始化為 0,并將“hash_map”對象初始化為將總和值存儲(chǔ)為鍵,將其索引存儲(chǔ)為值。
循環(huán)遍歷給定數(shù)組,對于每個(gè)元素 –
將當(dāng)前元素添加到總和中。
如果當(dāng)前總和為 0 或已存在于 hash_map 中,則返回 true,因?yàn)榇嬖诳偤蜑?0 的子數(shù)組。
否則,將總和值及其索引插入到 hash_map 中。
如果循環(huán)完成,則返回 false,因?yàn)椴淮嬖诳偤蜑?0 的子數(shù)組。
hash_map 有助于跟蹤累積和并確定是否存在重復(fù)和。
如果找到重復(fù)和,則意味著這兩個(gè)和之間存在一個(gè)和為 0 的子數(shù)組。
此方法的時(shí)間復(fù)雜度為 O(n),其中 n 是給定數(shù)組中的元素?cái)?shù)量。
示例
這是一個(gè)完整的 JavaScript 程序示例,用于查找是否存在總和為 0 的子數(shù)組 –
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));
登錄后復(fù)制
說明
函數(shù)hasZeroSum采用數(shù)組arr作為其參數(shù)。
我們初始化兩個(gè)變量 sum和set。 sum 變量用于跟蹤子數(shù)組中元素的當(dāng)前總和,set 用于存儲(chǔ)之前看到的總和。
李>
然后我們使用 for 循環(huán)來迭代數(shù)組的元素。
在每次迭代中,我們將當(dāng)前元素添加到 sum 中,并檢查 set 是否已包含 sum 的值。
如果sum的值已經(jīng)在集合中,表示從第一次出現(xiàn)該sum開始到當(dāng)前元素結(jié)束的子數(shù)組總和為 0,因此我們返回 true。
如果sum的值不在集合中,我們將其添加到集合中。
如果我們迭代了整個(gè)數(shù)組并且沒有返回 true,則意味著不存在總和為 0 的子數(shù)組,因此我們返回 false。
最后,我們使用示例數(shù)組測試該函數(shù)并將結(jié)果記錄到控制臺(tái)。
以上就是JavaScript 程序查找是否存在總和為 0 的子數(shù)組的詳細(xì)內(nèi)容,更多請關(guān)注www.92cms.cn其它相關(guān)文章!