让 A 为一组非空整数。编写一个名为“find”的函数,该函数输出 A 中具有最大乘积的非空子集。例如,find([-1,-2,-3,0,2]) = 12 =(-2)*(-3)* 2。
我的想法是将列表分为正整数列表和负整数列表:
1. 如果负整数个数为偶数,则将两个列表中的所有数字相乘即可得到答案。 2. 如果负整数个数为奇数,则找到最大的那个负整数并将其从列表中删除。然后将两个列表中的所有数字相乘。 3. 如果列表只有一个元素,则返回该元素。
以下是我在 Python 中编写的代码:
我有遗漏吗?附注:这是谷歌的foobar挑战中的一个问题,我似乎缺少一个案例,但我不知道是哪个。
现在是实际问题:
我的想法是将列表分为正整数列表和负整数列表:
1. 如果负整数个数为偶数,则将两个列表中的所有数字相乘即可得到答案。 2. 如果负整数个数为奇数,则找到最大的那个负整数并将其从列表中删除。然后将两个列表中的所有数字相乘。 3. 如果列表只有一个元素,则返回该元素。
以下是我在 Python 中编写的代码:
def find(xs):
neg_int = []
pos_int = []
if len(xs) == 1:
return str(xs[0])
for i in xs:
if i < 0:
neg_int.append(i)
elif i > 0:
pos_int.append(i)
if len(neg_int) == 1 and len(pos_int) == 0 and 0 in xs:
return str(0)
if len(neg_int) == len(pos_int) == 0:
return str(0)
max = 1
if len(pos_int) > 0:
for x in pos_int:
max=x*max
if len(neg_int) % 2 == 1:
max_neg = neg_int[0]
for j in neg_int:
if j > max_neg:
max_neg = j
neg_int.remove(max_neg)
for k in neg_int:
max = k*max
return str(max)
我有遗漏吗?附注:这是谷歌的foobar挑战中的一个问题,我似乎缺少一个案例,但我不知道是哪个。
现在是实际问题:
![enter image description here](https://istack.dev59.com/zAw0f.webp)
[2, 3, 1, 1]
的结果与[2, 3]
相同。挑战中是否有关于如何解决这种差异的说明? - mgilson