152. 乘积最大子数组
- 原题链接:
- 完成情况:
- 解题思路:
- 参考代码:
原题链接:
152. 乘积最大子数组
https://leetcode.cn/problems/maximum-product-subarray/
完成情况:
解题思路:
- 看好题目,注意就是单个数也可能产生最大值。
- 就是支持联乘,然后负负得正,所以注意最小值也可能产生出最大值。
参考代码:
package 西湖算法题解___中等题;
public class __152乘积最大子数组 {
public int maxProduct(int[] nums) {
int length = nums.length;
int [] maxF = new int [length];
int [] minF = new int [length]; //正负正负,所以最小值也有可能是最大值。
System.arraycopy(nums,0,maxF,0,length);
System.arraycopy(nums,0,minF,0,length);
for (int i=1;i<length;i++){
maxF[i] = Math.max(maxF[i-1] * nums[i],Math.max(nums[i],minF[i-1] * nums[i] )); //防止单数会产生最大
minF[i] = Math.min(minF[i-1] * nums[i],Math.min(nums[i],maxF[i-1] * nums[i] )); //防止单数会产生最小
}
int ans = maxF[0];
for (int i=1;i<length;i++){
ans = Math.max(ans,maxF[i]);
}
return ans;
}
}