三位数逻辑的最大乘积

时间:2017-06-30 16:27:23

标签: arrays list python-3.x math

strsplit

我的想法是,如果最小的2个负数的绝对值大于第2个最大的正数,则应该在计算中使用这些负数。否则,应该是最大3个nums的产品。任何人都可以看一下,看看哪个逻辑错了?

2 个答案:

答案 0 :(得分:0)

这里有三种可能性:

  1. 三个最大正数的乘积
  2. 最大正数与两个最小负数的乘积
  3. 如果列表中没有正数,则三个最大非正数的乘积。例如,[-5, -4, -3, -2, -1]的答案是-3 * -2 * -1 = -6
  4. 你没有检查可能性#3,所以你的日常工作有时会失败。

    另外,为了区分#1和#2,你要检查两个最小负数(nums[0] * nums[1]如果它们都是负数)的乘积是否大于第二个和第三个最大数的乘积({ {1}}如果他们都是积极的)。当然,你需要检查有三个正值,等等。你还需要注意一个或多个有趣值为零的边缘情况。

    请注意,您可以将我的所有三种可能性减少到这一点:

    nums[-3] * nums[-2]

    您可以通过将nums.sort() return max(nums[-3] * nums[-2] * nums[-1], nums[0] * nums[1] * nums[-1]) 替换为查找数组中的两个最小值和三个最大值来减少算法的总体时间复杂度,但是您的数组大小最多为sort()而不是关注这里。

答案 1 :(得分:0)

可能正在使用itertools.combination()生成所有三种可能的组合,然后检查每种组合的产品。

import itertools

def prod(iterable): #use this funct as the built-in sum()
    x = 1
    for item in iterable:
        x *= item
    return x

comb = list(itertools.combinations(array, 3))
results= []
for item in comb:
    results.append(prod(item))
print(max(results))