在数字的数组(矢量)中找到两个数字,它们的乘积最大.禁止使用嵌套循环



我有向量array
用户在其中输入一些整数值。
例如向量array可以是这样的:
array = [1, 2, 3, 4, 5, 333, 123, 534, 1, 3, 0, -12, -11]
如何在这个向量中找到乘积最大的一对数字?不要使用嵌套循环(循环中的循环),这是禁止的。我不需要现成的解决方案,我只需要一个想法。非常感谢

脑海中浮现的最佳想法是找到2个最大的正数和2个最小的负数。其中一对具有阵列中最大的乘积。

这可以在线性时间内完成,只需一次。有两个变量largestsecond_largest,并将它们初始化为尽可能小的值。在对数组进行迭代时,请检查该值是否大于largest。如果是,则将largest放在second_largest中,并将largest更新为新值。如果该值不大于largest但大于second_largest,则更新second_largest

同样的想法也可以用于两个最小的负值。

最后,取生产最大产品的那一对。

有一条边需要注意:数组只有2个值,它们有不同的符号,或者其中一个为零。通过检查数组长度来处理这种边缘情况,如果它是2,只需返回这两个值的乘积,因为你做得再好不过了。正如@apple-apple所指出的,这种边缘情况也可以在主算法中得到处理,但我想确保你有意识地意识到这一点。

最新更新