[LeetCode]152. 乘积最大子数组(java实现)动态规划 dp
1. 题目
2. 读题(需要重点注意的东西)
思路(dp):
上述取 max 、min 是为了简化代码
!
由于每次只与当前数和f[i-1]
和g[i-1]
有关,因此不需要开数组,用滚动数组
存储 f[i-1] 和 g[i-1] 即可
3. 解法
---------------------------------------------------解法---------------------------------------------------
class Solution {
public int maxProduct(int[] nums) {
int res = nums[0];
int f = nums[0],g = nums[0];
for(int i = 1;i < nums.length;i++){
int a = nums[i],fa = f * a,ga = g * a;
f = Math.max(a,Math.max(fa ,ga));
g = Math.min(a,Math.min(fa,ga));
res = Math.max(res,f);
}
return res;
}
}
可能存在的问题:
4. 可能有帮助的前置习题
5. 所用到的数据结构与算法思想
- 动态规划
- 滚动数组