給定一個(gè)整數(shù)數(shù)組 nums ,找出一個(gè)序列中乘積最大的連續(xù)子序列(該序列至少包含一個(gè)數(shù))。
示例 1:
輸入: [2,3,-2,4]
輸出: 6
解釋: 子數(shù)組 [2,3] 有最大乘積 6。
示例 2:
輸入: [-2,0,-1]
輸出: 0
解釋: 結(jié)果不能為 2, 因?yàn)?[-2,-1] 不是子數(shù)組
解法分析
用數(shù)組max[i]和min[i]分別記錄前i個(gè)字符時(shí)的最大值和最小值,用result和max[i]進(jìn)行比較,result = Math.max(result,max[i]);
class Solution {
public int maxProduct(int[] nums) {
if(nums.length == 1)
return nums[0];
int len = nums.length;
int result = nums[0];
int[] max = new int[len];
int[] min = new int[len];
min[0] = nums[0];max[0] = nums[0];
for(int i = 1; i < len; ++i){
if(nums[i] >= 0){
max[i] = Math.max(max[i - 1] * nums[i],nums[i]);
min[i] = Math.min(min[i - 1] * nums[i],nums[i]);
}else{
max[i] = Math.max(min[i - 1] * nums[i],nums[i]);
min[i] = Math.min(max[i - 1] * nums[i],nums[i]);
}
result = Math.max(result,max[i]);
}
return result;
}
}