152. Maximum Product Subarray

来源:互联网 发布:网络心理咨询师招聘 编辑:程序博客网 时间:2024/03/29 10:12

QUESTION

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.

思路

这道题和之前求最大连续的和差不多,所不同的是乘积有负数的情况,不能舍弃,有一天负数也会变为最大的,product有乘积的意思。最大连续子串的和的求解方法是,从左到右遍历,把以前的和与现在的元素作对比,把较大的那个存入以前的和。最大连续乘积的不同在于,不光要存最大的积还要存最小的积,上代码最清楚了

代码
public class Solution {    public int maxProduct(int[] nums) {        int maxpre = nums[0];        int minpre = nums[0];        int maxSofar = nums[0];        int maxhere,minhere;        for(int i = 1;i < nums.length;i++){            maxhere = Math.max(Math.max(maxpre * nums[i],minpre * nums[i]),nums[i]);            minhere = Math.min(Math.min(maxpre * nums[i],minpre * nums[i]),nums[i]);//保留一个最小值            maxSofar = Math.max(maxhere,maxSofar);            maxpre = maxhere;            minpre = minhere;        }        return maxSofar;    }}

结果及分析

时间复杂度为O(n),空间复杂度为O(1);

0 0
原创粉丝点击