JavaScript 程式查詢是否存在和為 0 的子陣列
作為開發者,我們經常被要求查詢陣列中是否存在和為 0 的子陣列。這可以透過使用字首和的概念來實現。我們將跟蹤迄今為止看到的子陣列元素的和,並將其儲存在雜湊對映中。如果之前已經看到過該和,則表示存在具有該和的子陣列,並且和為 0。我們將持續更新雜湊對映,其中儲存迄今為止看到的元素的和。這樣,我們就可以確定陣列中是否存在和為 0 的子陣列。
方法
將變數“sum”初始化為 0,並將“hash_map”物件初始化為儲存和值作為鍵,其索引作為值。
遍歷給定的陣列,對於每個元素 -
將當前元素新增到和中。
如果當前和為 0 或已存在於 hash_map 中,則返回 true,因為存在和為 0 的子陣列。
否則,將和值及其索引插入到 hash_map 中。
如果迴圈完成,則返回 false,因為不存在和為 0 的子陣列。
hash_map 有助於跟蹤累積和並確定是否存在任何重複的和。
如果找到重複的和,則表示這兩個和之間存在一個子陣列,其和為 0。
此方法的時間複雜度為 O(n),其中 n 是給定陣列中元素的數量。
示例
這是一個查詢陣列中是否存在和為 0 的子陣列的 JavaScript 程式的完整示例 -
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的值已在set中,則表示從該和第一次出現開始到當前元素結束的子陣列的和為 0,因此我們返回true。
如果sum的值不在set中,則將其新增到set中。
如果我們遍歷了整個陣列並且沒有返回true,則表示不存在和為 0 的子陣列,因此我們返回false。
最後,我們使用示例陣列測試該函式並將結果記錄到控制檯。
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP