1、dp数组的含义

maxDP[i]中存储 以nums[i]为结尾元素的子数组的最大乘积
minDP[i]中存储 以nums[i]为结尾元素的子数组的最小乘积

注意到:maxDP[i] >= minDP[i] for all i from 0 to nums.size()-1

2、根据maxDP[i]和minDP[i]的正负,分类讨论

情况1:
如果nums[i] == 0
maxDP[i] 等于 0, 注意:任何数字与0的乘积都是0
minDP[i] 等于 0, 注意:任何数字与0的乘积都是0 情况2:
如果nums[i] > 0
maxDP[i] 等于 max{ nums[i], if maxDP[i-1] <= 0
nums[i]*maxDP[i-1](反证法), if maxDP[i-1] > 0
}
注意:maxDP[i-1]的值,已经覆盖了所有情况,不必再考虑minDP[i-1] minDP[i] 等于 min{ nums[i], if minDP[i-1] > 0(不能往左乘,越乘越大)
nums[i]*minDP[i-1](反证法), if minDP[i-1] <= 0
}
注意:minDP[i-1]的值,已经覆盖了所有情况,不必再考虑maxDP[i-1]
情况3:
如果nums[i] < 0
maxDP[i] 等于 max{ nums[i]*minDP[i-1](反证法), if minDP[i-1] < 0
nums[i], if minDP[i-1] => 0
}
注意:minDP[i-1]的值,已经覆盖了所有情况,不必再考虑maxDP[i-1] minDP[i] 等于 min{ nums[i]*maxDP[i-1](反证法), if maxDP[i-1] > 0
nums[i], if maxDp[i-1] <= 0
}
注意:maxDP[i-1]的值,已经覆盖了所有情况,不必再考虑minDP[i-1] 综上,不论是maxDP[i]还是minDP[i],都是在maxDP[i-1]*nums[i],minDP[i-1]*nums[i],nums[i]这三个数中产生的

maxDP[i]是三个数中最大者,minDP[i]是三个数中最小者


    maxDP[i] = max(maxDP[i-1]*nums[i], max(minDP[i-1]*nums[i], nums[i]))
minDP[i] = min(minDP[i-1]*nums[i], min(maxDP[i-1]*nums[i], nums[i]))

3、实现

class Solution {
public:
int maxProduct(vector<int>& nums) {
vector<int> minDP(nums), maxDP(nums);
int ans = nums[0];
for (int i = 1; i < nums.size(); i++) {
maxDP[i] = max(maxDP[i-1]*nums[i], max(minDP[i-1]*nums[i], nums[i]));
minDP[i] = min(minDP[i-1]*nums[i], min(maxDP[i-1]*nums[i], nums[i]));
if (maxDP[i] > ans)
ans = maxDP[i];
}
return ans;
}
};

最新文章

  1. [Machine Learning] 机器学习常见算法分类汇总
  2. test-output目录中找不到testng-fail.xml原因+Reportng+ant build.xml文件
  3. XML Data Type Methods(一)
  4. 在线生成CSS样式和兼容的字体格式
  5. fetch the words from url
  6. 手势识别(一)--手势基本概念和ChaLearn Gesture Challenge
  7. Environment.SpecialFolder.CommonApplicationData
  8. iOS设计模式之生成器
  9. CoreAnimation6-基于定时器的动画和性能调优
  10. 一个测ip和端口是否联通的工具类
  11. Javascript进阶篇——(DOM—认识DOM、ByName、ByTagName)—笔记整理
  12. jsp 、js和css
  13. poj 2229 Sumsets(dp 或 数学)
  14. android Xml生成一条细线,以及获取屏幕宽度和高度
  15. Smarterer Test
  16. C#中的DataTable简单使用Merge
  17. Python 中的闭包
  18. LOG4J日志级别详解
  19. python3 tkinter报错:_tkinter.TclError: cannot use geometry manager pack inside . which already has slaves managed by grid
  20. Exp3 免杀原理与实践 20164302 王一帆

热门文章

  1. 在线设计器 DesignO 的分析
  2. SQL常用命令使用方法
  3. form表单enctype扩展
  4. channel 死锁
  5. tp-link路由器后台_硬解
  6. windows自带xbox game bar如何更改录制视频保存位置
  7. 监控系统grafana常见问题合集
  8. Iperf参数详解
  9. iOS开发之从UIColo到十六进制
  10. vue封装全局确认弹窗