最大乘积
最大乘积
http://www.nowcoder.com/questionTerminal/5f29c72b1ae14d92b9c3fa03a037ac5f
方法一
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))