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;
    }
}

相关文章:

  • 2022-12-23
  • 2021-08-21
  • 2022-01-12
  • 2021-08-27
  • 2021-09-12
  • 2021-04-03
  • 2021-06-25
  • 2022-12-23
猜你喜欢
  • 2021-11-14
  • 2021-11-27
  • 2021-07-14
  • 2021-09-27
  • 2021-06-01
  • 2021-10-26
  • 2022-12-23
相关资源
相似解决方案