温馨提示:本文翻译自stackoverflow.com,查看原文请点击:python - Find a maximum possible value of an array
algorithm max python

python - 查找数组的最大可能值

发布于 2020-04-13 14:19:24

我有一个整数数组,我需要获取它们的最大可能值。如果我有负数并且它们的总数不均匀,那么我必须排除其中之一以使数组为正。

如果我的内部为0,并且会影响乘法结果,那么我也必须排除它。例如:对于[2,5,-2]结果应为10,对于[-2,-5,-1,0,2]结果应为20。

我执行了任务,但是系统不接受我的解决方案,请您看看我可能会出错的解决方案吗?我尝试了不同的边缘情况,例如[-1],[1],[0],[0,0,0]

def answer(n):
    arr = 0
    res = 1
    for number in n:
        if number < 0:
            arr += 1
    n.sort()
    while 0 in n: n.remove(0)
    if not n:
        return '0'
    if len(n) == 1:
        if n[0] < 0:
            return '0'
    elif arr % 2 != 0:
        n.pop(arr - 1)
    for x in n:
        res *= x
    return str(res)

查看更多

提问者
JohnPix
被浏览
10
Grismar 2020-02-03 18:09

似乎您希望将列表中的所有数字相乘,除了任何零以外,如果负数的个数为奇数,是否要排除最小的负数?

一个简单的解决方案:

from functools import reduce


def answer(numbers):
    selection = [n for n in numbers if n != 0]
    negative = [n for n in selection if n < 0]
    if len(negative) % 2 == 1:
        selection.remove(max(negative))
    if not selection:
        return 0
    else:
        return reduce(lambda x, y: x * y, selection)


print(answer([-2, -5, -1, 0, 2]))