【发布时间】:2022-06-25 20:32:05
【问题描述】:
所以问题很简单,给定一个大小为 N( N
我们必须按降序输出。
有没有办法以低于指数的复杂性做到这一点。 我的想法是 如果要生成2^N个item,复杂度怎么可能小于2^N,
在amazon OA中问(问题叫find k maximum priority)
【问题讨论】:
-
显而易见的答案是您不必生成所有 2^N 项。例如,您可以通过一次遍历数组(即 O(N))找到最大子集和。
-
它的最小值为 (2000,2^N),因为 2^N 是数组可以拥有的子集数量上限。所以复杂度不会是 2^N
-
我得到了这个方法,但我有一些疑问。我们将只取所有正元素的总和,然后我们可以选择删除最小的正元素或添加最小的负数来得到下一个和,所以为了做到这一点,我们可以只存储 Math.abs最小堆中的所有数字,并从 maxSum 中减去最小堆的输出以获得下一个最大的和。但这是否足够,因为使用这种方法,我们只能正确生成 N+1 个和。我刚刚重新检查了约束,它是 k
-
如果你的方法只能产生 N+1 个和,而 k>N+1,你就输了。
标签: algorithm