leetcode-152. 乘积最大子数组

题目

152. 乘积最大子数组

解法

每次取一个最小的,一个最大的
如果最小的乘积和当前的值乘完之后变成了正数反而变大了,那最大值就是它

class Solution {
    
    /**
     * @param Integer[] $nums
     * @return Integer
     */
    function maxProduct($nums) {
        $len = count($nums);
        if ($len == 1) {
            return $nums[0];
        }
        
        $max = $curMin = $curMax = $nums[0];
        
        for ($i = 1; $i < $len; $i++) {
            $cur = $nums[$i];
            
            $tmpCurMin = $curMin;
            $curMin = min($curMin * $cur, $curMax * $cur, $cur);
            $curMax = max($tmpCurMin * $cur, $curMax * $cur, $cur);
            
            $max = max($max, $curMax);
        }
        
        return $max;
    }
}
posted @ 2022-01-08 17:08  吴丹阳-V  阅读(12)  评论(0编辑  收藏  举报