我有一个整数数组,我需要获取它们的最大可能值。如果我有负数并且它们的总数不均匀,那么我必须排除其中之一以使数组为正。
如果内部有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)
看来您正在寻求将列表中的所有数字相乘,除了任何零之外,如果负数的数目为奇数,就排除了最小的负数?
一个简单的解决方案:
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]))