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; } }