最大乘积

最大乘积

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))
全部评论

相关推荐

10-30 22:18
已编辑
毛坦厂中学 C++
点赞 评论 收藏
分享
牛客717484937号:双飞硕没实习挺要命的
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务