方法一
1 维持正数的前三的一个列表
2 负数后三的一个列表
3 0单独一个列表长为三
然后负列表+0列表+正列表
return max(result[0]*result[1]*result[-1],result[-3]*result[-2]*result[-1])
如下
def pri(m,a):
if m<3:
return 0
result_p = [0,0,0] # 正数
result_n = [0,0,0] # 负数
num_0 = 0
for i in a:
if i>result_p[0]: # 正数前3或包括0的前三大
result_p[0]=i
result_p.sort()
if i<0: # 负数前3或包括0的前三小
if result_n[-1]==0:
result_n[-1]=i
result_n.sort()
elif i<result_n[-1]:
result_n[-1]=i
result_n.sort()
if i==0:
num_0 += 1
while result_p[0]==0: # 删除正数列表中的0项
del result_p[0]
if not result_p: # 如果都是0,删除完了
break
while result_n[-1]==0: # 删除负数列表中的0项
del result_n[-1]
if not result_n: # 如果都是0,删除完了
break
if num_0>0:
result_0 = [0,0,0] # 如果0超级多不至于占内存,用一个0的话return中可能溢出指针
else:
result_0 = []
result = result_n+result_0+result_p
return max(result[0]*result[1]*result[-1],result[-3]*result[-2]*result[-1])
m = int(input())
a = list(map(int,input().split(' ')))
print(pri(m,a))方法二
#方法二 分别求出max1,max2,max3,min2,min1
def pri(m,a):
if m<3:
return 0
def get_max(b):
max_ = b[0]
max_index = 0
for i in range(len(b)):
if b[i]>max_:
max_ = b[i]
max_index = i
return max_,max_index
def get_min(b):
min_ = b[0]
min_index = 0
for i in range(len(b)):
if b[i]<min_:
min_ = b[i]
min_index = i
return min_,min_index
max1,max_index = get_max(a)
del a[max_index]
max2,max_index = get_max(a)
del a[max_index]
max3,max_index = get_max(a)
a.extend([max1,max2])
min1,min_index = get_min(a)
del a[min_index]
min2,min_index = get_min(a)
return max(min1*min2*max1,max1*max2*max3)
m = int(input())
a = list(map(int,input().split(' ')))
print(pri(m,a))



京公网安备 11010502036488号