作为开发人员,我们经常被要求查找数组中是否存在总和为 0 的子数组。这可以通过使用前缀和的概念来完成。我们将跟踪到目前为止看到的子数组元素的总和并将其存储在哈希图中。如果之前看到了sum,则说明具有该sum的子数组存在并且sum为0。我们将使用迄今为止看到的元素总和不断更新哈希图。这样我们就可以判断数组中是否存在sum为0的子数组。
将变量“sum”初始化为 0,并将“hash_map”对象初始化为将总和值存储为键,将其索引存储为值。
循环遍历给定数组,对于每个元素 -
将当前元素添加到总和中。
如果当前总和为 0 或已存在于 hash_map 中,则返回 true,因为存在总和为 0 的子数组。
否则,将总和值及其索引插入到 hash_map 中。
如果循环完成,则返回 false,因为不存在总和为 0 的子数组。
hash_map 有助于跟踪累积和并确定是否存在重复和。
如果找到重复和,则意味着这两个和之间存在一个和为 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作为其参数。
我们初始化两个变量 sum和set。 sum 变量用于跟踪子数组中元素的当前总和,set 用于存储之前看到的总和。
李>然后我们使用 for 循环来迭代数组的元素。
在每次迭代中,我们将当前元素添加到 sum 中,并检查 set 是否已包含 sum 的值。< /p>
如果sum的值已经在集合中,表示从第一次出现该sum开始到当前元素结束的子数组总和为 0,因此我们返回 true。
如果sum的值不在集合中,我们将其添加到集合中。
如果我们迭代了整个数组并且没有返回 true,则意味着不存在总和为 0 的子数组,因此我们返回 false。< /p>
最后,我们使用示例数组测试该函数并将结果记录到控制台。
Python 服务器(使用 Jinja 提供 HTML 服务)可以在 Jenkins 管道中交互和修改文件吗?
Eval() 函数在动态调用函数时如何处理参数类型?
在本地服务器上使用MathJax.js显示Latex公式遇到问题可能有以下几个原因: 1. **文件路径错误**:确保MathJax.js文件的路径正确。如果是本地服务器,路径应该是相对于服务器根目录的。例如,如果MathJax.js位于服务器的`js`文件夹中,路径应为`/js/MathJax.js`。 2. **服务器配置问题**:某些服务器可能需要特定的配置来正确处理JavaScript文件。检查服务器是否正确配置以服务JavaScript文件,并确保没有阻止JavaScript文件的访问。
如何用WebSocket技术实现医学实时温度波形图的绘制?
DSA 与 JS:了解 JavaScript 中的自定义数组数据结构 - 分步指南
pnpm Monorepo下Prisma升级@prisma/client全局方法及问题规避