【发布时间】:2014-07-28 19:00:51
【问题描述】:
问题来自 Codility 编程培训,听起来如下: 我们有一个包含 n 个(范围从 1 到 100,000)个元素的数组 (A[]),这些是我们的参数。数组的元素是从 -2,147,483,648 到 2,147,483,647 的整数,我们需要找到不在数组中的最小正整数。当然,这可以在 O(n*log n) 中轻松完成,方法是对它们全部排序并遍历排序后的数组,寻找丢失的正数(最后一个操作在我的解决方案中具有 O(n) 最差时间复杂度)。但是根据 Codility 的说法,这个整个问题可以在 O(n) 中完成,我看不出有任何方法可以做到这一点。有人可以提供一些提示让我摆脱困境吗?
PS 这是一个我不能复制的问题的详细描述的链接 - https://codility.com/c/intro/demo35UEXH-EAT
【问题讨论】:
-
可以分配 O(n) 大小的临时存储空间吗?
-
要求正确算法的问题不适用于 SO,请尝试 codegolf.stackexchange.com。也就是说,您可以迭代数组,直到找到第一个正整数并将结果初始化为该数字;然后当你发现一个小于当前结果的数字时迭代其余的修改结果。
-
这个问题似乎跑题了,因为它要求的是“最佳算法”
标签: algorithm