【LeetCode】#152乘积最大子序列(Maximum Product Subarray)
题目描述
给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。
示例
示例 1:
输入: [2,3,-2,4]
输出: 6
解释: 子数组 [2,3] 有最大乘积 6。
示例 2:
输入: [-2,0,-1]
输出: 0
解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。
Description
Given an integer array nums, find the contiguous subarray within an array (containing at least one number) which has the largest product.
Example
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.
解法
class Solution {
public int maxProduct(int[] nums) {
if(nums.length==1){ return nums[0]; }
int[] plusMax = new int[nums.length];
int[] minusMin = new int[nums.length];
plusMax[0] = nums[0];
minusMin[0] = nums[0];
int max=nums[0];
for(int i=1;i<nums.length;i++){
plusMax[i] = Math.max(Math.max(plusMax[i-1]*nums[i],minusMin[i-1]*nums[i]),nums[i]);
minusMin[i] = Math.min(Math.min(plusMax[i-1]*nums[i],minusMin[i-1]*nums[i]),nums[i]);
max = Math.max(Math.max(plusMax[i],minusMin[i]),max);
}
return max;
}
}