152. Maximum Product Subarray

来源:互联网 发布:腾讯php是不是用的不多 编辑:程序博客网 时间:2024/04/24 04:47

最大连续子序列乘积
参考这个题解:
求最大连续子序列乘积与最大连续子序列和问题有所不同,因为其中有正有负还有可能有0。
假设数组为a[],直接利用动归来求解,考虑到可能存在负数的情况,我们用Max[i]来表示以a[i]结尾的最大连续子序列的乘积值,用Min[i]表示以a[i]结尾的最小的连续子序列的乘积值,那么状态转移方程为:
Max[i]=max{a[i], Max[i-1]*a[i], Min[i-1]*a[i]};
Min[i]=min{a[i], Max[i-1]*a[i], Min[i-1]*a[i]};

代码如下:
public class Solution {
public int max3(int a, int b, int c){
return Math.max(Math.max(a, b), c);
}

public int min3(int a, int b, int c){    return Math.min(Math.min(a, b), c);}public int maxProduct(int[] nums) {    int max[] = new int[nums.length];    int min[] = new int[nums.length];    max[0] = nums[0];    min[0] = nums[0];    int maxProduct = max[0];    for (int i = 1; i < nums.length; i ++){        max[i] = max3(nums[i], max[i-1]*nums[i], min[i-1]*nums[i]);        maxProduct = Math.max(max[i], maxProduct);        min[i] = min3(nums[i], max[i-1]*nums[i], min[i-1]*nums[i]);    }    return maxProduct;}

}

0 0
原创粉丝点击