Given an integer array nums, find the contiguous subarray within an array (containing at least one number) which has the largest product.
Example 1:
Input: [2,3,-2,4]
Output: 6
Explanation: [2,3] has the largest product 6.
Example 2:
Input: [-2,0,-1]
Output: 0
Explanation: The result cannot be 2, because [-2,-1] is not a subarray.
难度:medium
题目:给定整数数组,找出乘积最大的子数组。
思路:结合最大子数组和,这里用两个变量分别记下包含当前元素的最大乘积和最小乘积,因为下一个元素正负不定。
Runtime: 2 ms, faster than 74.69% of Java online submissions for Maximum Product Subarray.
Memory Usage: 37.6 MB, less than 100.00% of Java online submissions for Maximum Product Subarray.
public class Solution {
public int maxProduct(int[] nums) {
if (null == nums || nums.length < 1) {
return 0;
}
int maxVal = nums[0];
int curMaxVal = nums[0], curMinVal = nums[0];
for (int i = 1; i < nums.length; i++) {
int pCurMinVal = curMinVal;
int pCurMaxVal = curMaxVal;
curMaxVal = Math.max(Math.max(nums[i], curMaxVal * nums[i]), pCurMinVal * nums[i]);
curMinVal = Math.min(Math.min(nums[i], curMinVal * nums[i]), pCurMaxVal * nums[i]);
maxVal = Math.max(maxVal, curMaxVal);
}
return maxVal;
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。