LeetCode-152. Maximum Product Subarray

来源:互联网 发布:淘宝店铺金额怎么提现 编辑:程序博客网 时间:2024/06/16 02:23

Find the contiguous subarray within an array (containing at least one number) which has the largest product.

For example, given the array [2,3,-2,4],
the contiguous subarray [2,3] has the largest product = 6.

思路

在遍历数组时需要更新两个局部最优解和全局最优解,维护两个局部解是因为在遍历过程中会出现负数为偶数的情况,这时子串值会负负得正,从而有可能达到最大子串乘积,这两个局部最优解分别是当前子串的极大值和极小值。同时要考虑到0的因素,当出现0时局部变量往往要重置,即极大值和极小值有可能从0的下一个位置重新计算。

class Solution {    public int maxProduct(int[] nums) {        int largestProduct=nums[0];        int maxTemp=nums[0];        int minTemp=nums[0];        for(int i=1;i<nums.length;++i)        {            int a=maxTemp*nums[i];            int b=minTemp*nums[i];            maxTemp=Math.max(Math.max(a,b),nums[i]);            minTemp=Math.min(Math.min(a,b),nums[i]);            largestProduct=Math.max(largestProduct,maxTemp);        }        return  largestProduct;    }}
原创粉丝点击