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作為引數。

  • 我們初始化兩個變數sumsetsum變數用於跟蹤子陣列中元素的當前和,set用於儲存之前看到的和。

  • 然後我們使用for迴圈遍歷陣列的元素。

  • 在每次迭代中,我們將當前元素新增到sum中,並檢查set是否已包含sum的值。

  • 如果sum的值已在set中,則表示從該和第一次出現開始到當前元素結束的子陣列的和為 0,因此我們返回true

  • 如果sum的值不在set中,則將其新增到set中。

  • 如果我們遍歷了整個陣列並且沒有返回true,則表示不存在和為 0 的子陣列,因此我們返回false

  • 最後,我們使用示例陣列測試該函式並將結果記錄到控制檯。

更新於: 2023年3月15日

419 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.