def maxProduct(arr): if len(arr)==1: return arr max_val=arr[0] min_val=arr[0]
#用于保存最大乘积的结果 res=arr[0] for i in range(1,len(arr)):
#保留上一次计算的最大值,以便带入下面求解三者最大值,如果没有tmp_value,带入后面求min_val的时候,用max_val求三者最大值就不是上次的max_val了
tmp_max=max_val
#往前走一步的最大乘积必然在这三个中产生,因为有负数可能出现,所以保留最小乘积值 max_val=max(max(tmp_max*arr[i],min_val*arr[i]),arr[i]) min_val=min(min(tmp_max*arr[i],min_val*arr[i]),arr[i])
#当前最大乘积与历史保存的最大乘积进行比较,留下最大的乘积即可 res=max(max_val,res) return res