码迷,mamicode.com
首页 > 其他好文 > 详细

最大乘积

时间:2019-03-10 13:39:00      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:空间复杂度   range   inpu   spl   turn   code   split   空间   return   

给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)

def solve():
    n = input()
    a = input().split()
    for i in range(len(a)):
        a[i] = int(a[i])
    m1,m2,p1,p2,p3 = 0,0,0,0,0
    for i in a:
        if i<0:
            if i<m1:
                m2 = m1
                m1 = i
            elif i<m2:
                m2 = i
        elif i==0:
            zero = True
        else:
            if i>p3:
                p1 = p2
                p2 = p3
                p3 = i
            elif i>p2:
                p1 = p2
                p2 = i
            elif i>p1:
                p1 = i
    if p2==0 or p1==0:
        return m1*m2*p3
    # print(m1,m2,p1,p2,p3)
    return max(p1*p2*p3,m1*m2*p3)
 
print(solve())

最大乘积

标签:空间复杂度   range   inpu   spl   turn   code   split   空间   return   

原文地址:https://www.cnblogs.com/bernieloveslife/p/10504925.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!