找到三个数字的最高产品

use*_*709 26 python algorithm

给定一系列的int,arrayofints找到最高的产品Highestproduct,你可以得到三个整数.int的输入数组总是至少有三个整数.

所以我从中弹出了三个数字arrayofints并将它们插入highestproduct:

Highestproduct = arrayofints[:2]
for item in arrayofints[3:]:
    If min(Highestproduct) < item:
        Highestproduct[highestproduct.index(min(Highestproduct))] = item
Run Code Online (Sandbox Code Playgroud)

如果minhighestproduct不到项目:更换当前数量的最低数量.

这最终会产生最高的产品,但显然有更好的解决方案.我的做法有什么问题?我的解决方案是O(n)吗?

Rih*_*ons 63

跟踪两个最小元素和三个最大元素,答案应该是min1 * min2 * max1max1 * max2 * max3.

要获得3个整数的最大乘积,我们必须选择3个最大元素.然而,有一个问题,我们可以用2分钟的整数替换2个最小的3个最大元素中的2个.如果两个最小的整数都是负的,那么它们的乘积是正的,因此min1 * min2可能大于max2 * max3(数组中3个最大元素中最小的2个max2max32个).

这会O(n)及时运行.

  • 我喜欢所有负数的特殊情况如何仍然得到妥善处理.天才. (5认同)
  • 我们不关心0因素,如果它是最小值之一那么我们只选择最大值选项,如果它是最大值之一然后我们选择最小值选项,那么如果0同时是最小值和最大值选项那么它必须包括在内,因为您必须选择至少3个整数. (5认同)
  • 一个小修改:你的因素都不能是0. (3认同)
  • 你是怎么做的......甚至提出这么快?基本上我正在努力将期望的结果转化为简单的数学公式. (3认同)