[DP]152. Maximum Product Subarray

152. Maximum Product Subarray

虽然和53.很像,但是变成乘法就要考虑一个负负得正的问题。
例子:[2,-3,-2,4],i=2时,按之前的方法global_max = 2,因为2 *-3 <2。但是实际应该是12。所以不仅要维持到i位置的sub_max,还要维持到i位置的sub_min。
以i结尾的sub_max有三种可能:
Math.max{sub_max * num[i], sub_min * num[i], num[i]}
同理,sub_min也有三种可能 :
Math.min{sub_max * num[i], sub_min * num[i], num[i]}
要注意,更新sub_max以后,更新sub_min时应该用原来的sub_max,所以先保存一个temp。

class Solution {
    public int maxProduct(int[] nums) {
        if(nums.length == 0) return 0;
        int global = nums[0];
        int sub_max = nums[0];
        int sub_min = nums[0];
        for(int i = 1; i

你可能感兴趣的:([DP]152. Maximum Product Subarray)