乘法和加减不同,一个负号就能造成值的大小颠倒,对于正数来说乘以最大乘积才是最大的,对于负数来说乘以最小乘积才是最大的;因此整个数组乘积的大小可能会在最大乘积和最小乘积、以及它自身里来回变动,故而需要两个变量分别统计
n=int(input())
nums=list(map(int,input().split()))
re=max_c=min_c=nums[0] #分别记录初始结果,以及第一位的最大乘积和最小乘积
for i in range(1,n): #
n1,n2=nums[i]*max_c,nums[i]*min_c #最大乘积和最小乘积和新遍历到的数相乘
max_c=max(n1,n2,nums[i]) #最大乘积为:最大乘积、最小乘积、当前数中的最大值
min_c=min(n1,n2,nums[i]) #最大乘积为:最大乘积、最小乘积、当前数中的最小值
if re<max_c: #如果最大乘积大于初始结果,就更新他
re=max_c
print(re)

京公网安备 11010502036488号