乘法和加减不同,一个负号就能造成值的大小颠倒,对于正数来说乘以最大乘积才是最大的,对于负数来说乘以最小乘积才是最大的;因此整个数组乘积的大小可能会在最大乘积和最小乘积、以及它自身里来回变动,故而需要两个变量分别统计

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)