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