【发布时间】:2021-09-07 16:27:50
【问题描述】:
codility.com 上的 MaxProductOfThree 任务有多种答案,其中大部分都涉及排序算法。
问题是:
给定一个由 N 个整数组成的非空零索引数组 A。
问题是从给定数组中找到 3 个元素的最大乘积。
数组的长度在 3 到 100,000 之间
数组 A 的每个元素都是 [−1,000..1,000] 范围内的整数
expected worst-case time complexity is O(N*log(N));
expected worst-case space complexity is O(1),
超出输入存储(不包括输入参数所需的存储)。 示例:
a[0] = -3;
a[1] = 7;
a[2] = 2;
a[3] = 1;
a[4] = 5;
a[5] = 7;
最大乘积为 a[1]*a[4]*a[5] = 245
除了涉及排序的 O(n log n) 方法之外,还有线性时间解决方案吗?
【问题讨论】:
-
请更好地描述问题,输入是什么,预期输出是什么。例子会很棒。
-
如果你只需要找到数组中最大的 3 个元素,是的,这在 O(n) 中是可能的:en.wikipedia.org/wiki/Selection_algorithm
-
我也有答案,但我需要等待 8 小时才能发布,因为我是新成员。获得 3 的最大乘积的方法基本上是在数组的 1 次迭代中从数组中找到最大的 3 个数字和从数组中找到最小的 2 个数字。当然,我会在正确评论 8 小时后发布代码答案
-
@DanutClapa 如果您已经有了答案,为什么还要在 SO 上发布问题?
-
@DanutClapa 如果我没记错的话,问题表单中有一个复选框,上面写着“自己回答这个问题”,它允许您同时发布问题和答案。顺便说一句,您的问题不会因为您打算自己回答而被降低标准。您必须遵守 SO 准则,而您的问题缺乏质量。例如,至少您应该包含或解释问题陈述。