積最大サブ配列
テーマ:整数配列numsをあげます.配列の中で最も積が大きい連続サブ配列(このサブ配列には少なくとも1つの数字が含まれている)を見つけて、そのサブ配列に対応する積を返してください.
構想:動的計画dp[i][1]はnums[i]を末尾とする最大積である.本題と最大サブシーケンスと異なる点は負が正であることであり、nums[i]>0最大値乗nums[i]が最大値最小値乗nums[i]が最小値になりnums[i]<0になると逆注意:nums[i]>0で最大値がゼロ未満になると最大値はnums[i]となり、その他は同じである.
構想:動的計画dp[i][1]はnums[i]を末尾とする最大積である.本題と最大サブシーケンスと異なる点は負が正であることであり、nums[i]>0最大値乗nums[i]が最大値最小値乗nums[i]が最小値になりnums[i]<0になると逆注意:nums[i]>0で最大値がゼロ未満になると最大値はnums[i]となり、その他は同じである.
class Solution {
public int maxProduct(int[] nums) {
int n = nums.length;
int res = nums[0];
int p1 = nums[0];
int p2 = nums[1];
for(int i = 1;i<n;i++){
if(nums[i]>0){
int tmp1 = p1*nums[i];
int tmp2 = p2*nums[i];
p1 = Math.max(tmp1,nums[i]);
p2 = Math.min(tmp2,nums[i]);
}
else if(nums[i]==0){
p1 = 0;
p2 = 0;
}else{
}
res = Math.max(Math.max(p1,p2),res);
}
return res;
return res;
}
}