题目描述
解题思路
- 动态规划,从0-i的子数组的最大乘积为max,最小乘积为min,则0-i+1的最大乘积为
i+1为正数:max(max*(i+1),(i+1))
i+1为负数:max(min*(i+1),(i+1))
class Solution {
public int maxProduct(int[] nums) {
if(nums == null || nums.length == 0)
return 0;
int max = nums[0];
int min = nums[0];
int result = nums[0];
for(int i = 1 ; i < nums.length;i++){
if(nums[i]>0){
int temp = max;
max = Math.max(max*nums[i],nums[i]);
min = Math.min(min*nums[i],nums[i]);
}else{
int temp = max;
max = Math.max(min*nums[i],nums[i]);
min = Math.min(temp*nums[i],nums[i]);
}
if(max > result)
result = max;
}
return result;
}
}