力扣 122 买卖股票的最佳时机II

思路:

  • 动态规划,表面上是\(O(2^n)\)的搜索空间,实际上该天的选择只与前一天的状态(是否持有股票)有关。从收益的角度来看,确实每一天的不同选择都会产生不同的分支。动态规划相当于对原解空间进行了剪枝,剪枝的关键在于之后的选择只与当前是否持有股票的状态有关,因此只需要保留当前状态下的最优值,就能保证最优解的保留。

  • 对于这种时间序列或者类似的问题,可重点考虑其每一个阶段的状态。若考虑卖出,买入和保持,就很复杂,但是考虑是否持有就变成只有两个状态了。

  • 本质上很像贪心,都能保证每一步的最优解。关键在于找到这个结构。

    \(dp[i][0] = max(dp[i-1][0],dp[i-1][1]+prices[i])\)

    \(dp[i][1] = max(dp[i-1][0] - prices[i],dp[i-1][1])\)

class Solution {
public:
//动态规划
int maxProfit(vector<int>& prices) {
if(!prices.size()) return 0;
int n = prices.size();
int dp0 = 0;
int dp1 = -prices[0];
for(int i = 1; i < n; ++i){
dp0 = max(dp0,dp1 + prices[i]);
dp1 = max(dp0 - prices[i], dp1);
}
return max(dp0,dp1);
}
};

最新文章

  1. Hibernate5.2之多对多关联关系(六)
  2. hdu 5229 找规律
  3. 9月22日上午JavaScript----window对象
  4. URAL1079
  5. 某网站经纬度Decode
  6. hexo 部署至Git遇到的坑
  7. [Java]知乎下巴第0集:让我们一起来做一个知乎爬虫吧哦耶【转】
  8. 如何查看dede版本信息
  9. golang:一个高性能低精度timer实现
  10. Roomblock: a Platform for Learning ROS Navigation With Roomba, Raspberry Pi and RPLIDAR(转)
  11. 使用Spring+MySql实现读写分离(一)关于windows下安装mysql5.6
  12. 编写高质量代码:改善Java程序的151个建议 --[65~78]
  13. 后台管理界面admin
  14. SD-WAN介绍
  15. VS2012提示突然没有了
  16. Spring MVC+Spring+Mybatis+MySQL(IDEA)入门框架搭建
  17. POJ 3233 Matrix Power Series (矩阵快速幂)
  18. quartz (一) 基于 Quartz 开发企业级任务调度应用
  19. spark SQL学习(认识spark SQL)
  20. 基于Python的交互式访问

热门文章

  1. JavaScript封装函数:获取下一个/上一个兄弟元素节点
  2. python实现单链表及链表常用功能
  3. MySql 关闭 bin 和 log 日志
  4. reids等非关系数据库管理工具treesoft
  5. 极简 Node.js 入门 - 5.2 url &amp; querystring
  6. C语言中数组与指针的异同之处!你不知道的编程奥秘~
  7. js 无刷新文件上传 (兼容IE9 )
  8. swoft 使用协程 初试
  9. Linux安装软件时90%的人会遇到这个报错,如何解决?
  10. zookeeper核心之ZAB协议就这么简单!