Leetcode[152] Maximum Product Subarray
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.
DP
复杂度
O(N),O(1)
思路
要保留一个到某一位来看的最大值和最小值。因为在数组中有负数的出现,所以到这一位为止的能得到的最大值,可能是由之前的最大值和这个数相乘得到,也可能是最小值和这个数相乘得到的。
代码
public int maxProduct(int[] nums) {
if(nums == null || nums.length == 0) return 0;
int max = nums[0];
int maxProduct = nums[0];
int minProduct = nums[0];
for(int i = 1; i < nums.length; i ++) {
int prevMax = maxProduct;
int prevMin = minProduct;
maxProduct = Math.max(nums[i], Math.max(prevMax * nums[i], prevMin * nums[i]));
minProduct = Math.min(nums[i], Math.min(prevMin * nums[i], prevMax * nums[i]));
max = Math.max(max, maxProduct);
}
return max;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。