在数组中查找连续范围

在数组中查找连续范围,第1张

数组中查找连续范围

我认为以下解决方案将在O(n)时间中使用O(n)空间工作。

首先将数组中的所有条目放入哈希表。接下来,创建第二个哈希表,该表存储我们已“访问”的元素,该元素最初为空。

现在,一次遍历元素数组。对于每个元素,检查该元素是否在访问集中。如果是这样,请跳过它。否则,从该元素开始向上计数。在每个步骤中,检查当前数字是否在主哈希表中。如果是这样,请继续,并将当前值标记为已访问集的一部分。如果没有,请停止。接下来,重复此过程,除了向下计数。这告诉我们包含此特定数组值的范围内的连续元素数。如果我们跟踪以这种方式找到的最大范围,我们将有一个解决方案。

该算法的运行时复杂度为O(n)。要看到这一点,请注意,我们可以在O(n)时间的第一步中构建哈希表。接下来,当我们开始扫描到数组以找到最大范围时,每个扫描范围所花费的时间与该范围的长度成比例。由于范围长度的总和是原始数组中元素的数量,并且由于我们从未两次扫描相同的范围(因为我们标记了我们访问的每个数字),因此第二步将O(n)时间作为好,对于O(n)的净运行时间。

编辑: 如果您很好奇,我可以使用该算法的
Java实现
,以及对其工作原理以及运行时正确性的详细分析。它还探讨了一些在算法的初始描述中不明显的边缘情况(例如,如何处理整数溢出)。

希望这可以帮助!



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5643280.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存