'''
解题思路:
1、要同时记住每次乘积之后的最大,最小(比较时要含自己)
2、最大最小要存个临时变量以防覆盖
#=============================================================================================
'''
#
# 
# @param arr double浮点型一维数组 
# @return double浮点型
#
class Solution:
    def maxProduct(self , arr ):
        # write code here
        #print(arr)

        n = len(arr)
        t_max = arr[0]
        t_min = arr[0]
        maxprod = arr[0]
        for i in range(1,n):
            t_max2 = max(t_max*arr[i], arr[i], t_min*arr[i])
            t_min2 = min(t_max*arr[i], arr[i], t_min*arr[i])
            t_max = t_max2
            t_min = t_min2
            if t_max > maxprod:
                maxprod = t_max

        return maxprod