JavaScript 查找是否存在和为0的子数组

JavaScript 查找是否存在和为0的子数组

作为开发者,我们经常被要求在数组中查找是否存在和为0的子数组。这可以通过使用前缀和的概念来实现。我们将跟踪到目前为止已经看到的子数组的元素之和,并将其存储在哈希表中。如果以前已经看到过这个和,那么意味着存在和为0的子数组。我们会不断更新哈希表,记录目前为止已经看到的元素之和。这样,我们就可以确定数组中是否存在和为0的子数组。

方法

  • 初始化变量”sum”为0,初始化哈希表”hash_map”用来存储和值作为键,它们的索引作为值。

  • 遍历给定数组,对于每个元素 –

    • 将当前元素添加到和中。

    • 如果当前和为0或已经存在于哈希表中,则返回true,表示存在和为0的子数组。

    • 否则,将和的值和它的索引插入到哈希表中。

  • 如果循环完成,返回false,表示没有和为0的子数组。

  • 哈希表有助于跟踪累积和,并确定是否存在重复的和。

  • 如果找到重复的和,则意味着在这两个和之间存在一个子数组,其和为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 作为参数。

  • 我们初始化两个变量 sumset 。变量 sum 用于跟踪子数组中元素当前和, set 用于存储先前出现的和。

  • 然后我们使用一个 for 循环来遍历数组的元素。

  • 在每次迭代中,我们将当前元素添加到 sum 中,并检查 set 是否已经包含 sum 的值。

  • 如果 sum 的值已经在 set 中,意味着从第一次出现该和的子数组到当前元素的和为0,所以我们返回 true

  • 如果 sum 的值不在 set 中,我们将其添加到集合中。

  • 如果我们遍历整个数组并且没有返回 true ,意味着没有和为0的子数组,所以我们返回 false

  • 最后,我们使用一个示例数组测试该函数,并将结果记录到控制台中。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程