【leetcode】Array—— Maximum Product Subarray(152)

来源:互联网 发布:张辽和关羽谁厉害知乎 编辑:程序博客网 时间:2024/06/02 02:28

题目: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.

思路:之前写过一题Maximun Subarray,用DP算法,maxEndHere的思路,时间复杂度为O(n)。附上之前的博客:http://blog.csdn.net/u013127687/article/details/50809675

该题模范之前题目的思路,也采用DP以及maxEndHere的思路,但是细节方面有所不同。之前求和,如果是负数,max肯定是一直减小,但是本题中,如果出现负数,max的确变小了,但是再出现一次负数,max会增大。所以本题中维护了两个变量:maxEndHere以及minEndHere。

maxEndHere=max{nums[i] , nums[i]*maxEndHere , nums[i]*minEndHere}

minEndHere=min{nums[i] , nums[i]*maxEndHere , nums[i]*minEndHere}

最终返回maxEndHere的最大值。

代码:

    public int maxProduct(int[] nums) {        int max=nums[0];        int maxEndHere=nums[0];        int minEndHere=nums[0];                for(int i=1;i<nums.length;i++){        int i1=maxEndHere*nums[i];        int i2=minEndHere*nums[i];        maxEndHere=Math.max(Math.max(i1, i2),nums[i]);                minEndHere=Math.min(Math.min(i1, i2),nums[i]);                max=Math.max(maxEndHere, max);        }    return max;    }

0 0
原创粉丝点击