动态规划之力扣股票类问题

注意:123和124是一个思路,他们和后面的两题思路不一样。123 124的思路主线是k次,所以对某天的股票,第k次买入 = 第k-1次卖出+p(这里的max操作先省略),第k次卖出=第k次买入后+p;

后两题主要是天数的关系,k与k-1天关联。

    //121. 买卖股票的最佳时机public int maxProfit(int[] prices){if(prices.length==0) return 0;int res = 0;int min = prices[0];for (int p : prices) {min = Math.min(min,p);res = Math.max(res,p-min);}return res;}//122. 买卖股票的最佳时机 IIpublic int maxProfit2(int[] prices) {int res = 0;if(prices.length<2)return 0;for(int i = 1;i<prices.length;i++){res += prices[i-1]<prices[i]?prices[i]-prices[i-1]:0;}return res;}//123. 买卖股票的最佳时机 IIIpublic int maxProfit3(int[] prices) {int fbuy = -999999,fsel = 0;int sbuy = -999999,ssel = 0;for(int p:prices){fbuy = Math.max(fbuy,-p);fsel = Math.max(fsel,fbuy + p);sbuy = Math.max(sbuy,fsel-p);ssel = Math.max(ssel,sbuy+p);}return ssel;}//188. 买卖股票的最佳时机 IVpublic int maxProfit(int k, int[] prices) {if (k<1 || prices.length<2)return 0;if (k>prices.length/2) return maxProfit2(prices);//k足够大int[][] dp = new int[k][2];//第i天最后一个操作是 0买入 1卖出 时的最大收益;for (int i = 0; i < k; i++) dp[i][0] = Integer.MIN_VALUE;for (int p : prices){dp[0][0] = Math.max(dp[0][0],-p);dp[0][1] = Math.max(dp[0][1],dp[0][0]+p);for (int i = 1;i<k;i++){dp[i][0] = Math.max(dp[i][0],dp[i-1][1]-p);dp[i][1] = Math.max(dp[i][1],dp[i][0] + p);}}return dp[k-1][1];}
//309. 最佳买卖股票时机含冷冻期public int maxProfit_(int[] prices) {//买卖股票系列问题if(prices == null || prices.length < 2){return 0;}int n = prices.length;int [][] dp = new int[n][3];//买入 冷冻 卖出,第i天最后一个操作是xx时的最大收益;dp[0][0] = -prices[0];dp[0][1] = 0;dp[0][2] = 0;for(int i = 1;i<n;i++){dp[i][0] = Math.max(dp[i-1][0],dp[i-1][1]-prices[i]);//最后是买入 包含昨天就买入和昨天冷冻今天买入的情况dp[i][1] = Math.max(dp[i-1][1],dp[i-1][2]);//最后是冷冻 包含昨天就冷冻和昨天卖出今天冷冻dp[i][2] = dp[i-1][0]+prices[i];//最后是卖出 (不包含昨天就卖出) 昨天买入 今天卖出}return Math.max(dp[n-1][1],dp[n-1][2]);}
    //714. 买卖股票的最佳时机含手续费//dp 设置两个数组通用解法  二维数组也可public int maxProfit(int[] prices, int fee) {int n = prices.length;if(n<2)return 0;/*int[] dp1 = new int[n];//have stock in i_dayint[] dp2 = new int[n];//dont havadp1[0] = -prices[0];dp2[0] = 0;for(int i = 1;i<n;i++){dp1[i] = Math.max(dp1[i-1],dp2[i-1]-prices[i]);dp2[i] = Math.max(dp2[i-1],dp1[i-1]+prices[i]-fee);}return dp2[n-1];*/int[][] dp = new int[n][2];//0 最后操作是买入  1 最后操作是卖出dp[0][0] = -prices[0];dp[0][1] = 0;for (int i = 1; i < n; i++) {dp[i][0] = Math.max(dp[i-1][0],dp[i-1][1]-prices[i]);dp[i][1] = Math.max(dp[i-1][1],dp[i-1][0] + prices[i] - fee);}return dp[n-1][1];}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/418319.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端学习(2005)vue之电商管理系统电商系统之获取动态参数列表

目录结构 router.js import Vue from vue import Router from vue-router import Login from ./components/Login.vue import Home from ./components/Home.vue import Welcome from ./components/Welcome.vue import Users from ./components/user/Users.vue import Right fr…

分布式技术一周技术动态 2016.07.10

分布式系统实践 1. 剖析Elasticsearch集群&#xff1a;存储模型和读写操作 https://mp.weixin.qq.com/s?__bizMzA5NzkxMzg1Nw&mid2653159983&idx1&sna79206bac0f14d61b47620ceed6cb0da&scene0&key77421cf58af4a6535cd92e6d57c51e9de6a6de948c6455bdd581f7…

Mysql存储结构B树与B+树与索引

首先要说明的是&#xff0c;B-树和B树是指同一个结构&#xff0c;并没有所谓的B减树&#xff0c;两种树是B-树和B树。 Mysql存储结构是一个B树。 1.存储结构与索引 众所周知&#xff0c;索引是关系型数据库中给数据库表中一列或多列的值排序后的存储结构&#xff0c;它是一种…

前端学习(2006)vue之电商管理系统电商系统之绘制商品参数的复选框

目录结构 router.js import Vue from vue import Router from vue-router import Login from ./components/Login.vue import Home from ./components/Home.vue import Welcome from ./components/Welcome.vue import Users from ./components/user/Users.vue import Right fr…

酒厂选址(codevs 1507)

题目描述 Description Abstinence&#xff08;戒酒&#xff09;岛的居民们酷爱一种无酒精啤酒。以前这种啤酒都是从波兰进口&#xff0c;但今年居民们想建一个自己的啤酒厂。岛上所有的城市都坐落在海边&#xff0c;并且由一条沿海岸线的环岛高速路连接。酒厂的投资者收集了关于…

spring入门笔记

记录&#xff1a; 一。程序耦合 以下体现了程序耦合&#xff1a; 1.注册驱动 2.获取链接 3.获取操作数据库的预处理对象 4.执行sql&#xff0c;得到数据集 5.遍历结果集 6.释放资源 二。IOC 工厂模式为读取配置文件&#xff0c;&#xff08;id-name&#xff09;通过文…

struts2.0标签库

用过struts1.x的人都知道&#xff0c;标签库有html、bean、logic、tiles&#xff0c;而struts2.0里的标签却没有分类&#xff0c;只用在jsp头文件加上<% taglib prefix"s" uri"/struts-tags" %>就能使用struts2.0的标签库 下面就介绍下每个标签的用法…

前端学习(2007)vue之电商管理系统电商系统之优化复选框的样式

目录结构 router.js import Vue from vue import Router from vue-router import Login from ./components/Login.vue import Home from ./components/Home.vue import Welcome from ./components/Welcome.vue import Users from ./components/user/Users.vue import Right fr…

MapReduce改造fp-growth算法

1. FP-Growth算法弊端 FP-Growth算法是挖掘频繁项集最常用的算法之一&#xff0c;其是基于迭代FP-Tree生成频繁项集的关联规则算法。此算法仅进行两次数据集扫描&#xff0c;递归迭代构建FP-Tree(FP条件树)&#xff0c;当FP-Tree中只有一个单分支时&#xff0c;递归迭代构建结…

《一线架构师实践指南》—— 读后总结

之前总觉得架构是一件很高大上的工作&#xff0c;跟普通的编码设计不太一样。前一段实践&#xff0c;自己也尝试做过架构的工作&#xff0c;可惜经验不足导致架构非常混乱。这里读完这本书&#xff0c;大体上对架构的工作有所了解&#xff0c;也稍微摸清了些门道。 我理解的架构…

随机排列实现 -shuffle算法

随机排列实现 -shuffle算法 洗牌算法&#xff08;shuffle&#xff09;&#xff1a;原理是&#xff0c;一个数A&#xff0c;随机选一个在这个数A之前的下标&#xff0c;将这个下标对应数字与A对换&#xff1b;之后不再考虑最后的这一个数&#xff1b; 类似于无放回的抽签问题&…

前端学习(2008)vue之电商管理系统电商系统之获取静态属性列表

目录结构 router.js import Vue from vue import Router from vue-router import Login from ./components/Login.vue import Home from ./components/Home.vue import Welcome from ./components/Welcome.vue import Users from ./components/user/Users.vue import Right fr…

转载_递归树求递归算法的时间复杂度

递归算法时间复杂度的计算方程式一个递归方程&#xff1a; 在引入递归树之前可以考虑一个例子&#xff1a; T(n) 2T(n/2) n2 迭代2次可以得&#xff1a; T(n) n2 2(2T(n/4) (n/2) 2) 还可以继续迭代&#xff0c;将其完全展开可得&#xff1a; T(n) n2 2((n/2) 2 2((n/2…

[转]Eclipse Java注释模板设置详解

原文链接&#xff1a;http://blog.csdn.net/ahhsxy/archive/2009/09/11/4542682.aspx 设置注释模板的入口&#xff1a; Window->Preference->Java->Code Style->Code Template 然后展开Comments节点就是所有需设置注释的元素啦。现就每一个元素逐一介绍&#xff1a…

前端学习(2011)vue之电商管理系统电商系统之初步使用upload上传组件

目录结构 router.js import Vue from vue import Router from vue-router import Login from ./components/Login.vue import Home from ./components/Home.vue import Welcome from ./components/Welcome.vue import Users from ./components/user/Users.vue import Right fr…

为什么使用Deque而不使用Stack构造栈

为什么使用Deque而不使用Stack构造栈 Class Stack<E> java.lang.Object java.util.AbstractCollection<E> java.util.AbstractList<E> java.util.Vector<E> java.util.Stack<E> 实现的所有接口 Serializable &#xff0c; Cloneable &#xff…

DDD学习笔记一

由于也是初学DDD&#xff0c;难免有很多不足和认识错误的地方。多数内容来自其他网络资料或者书籍。 参考&#xff1a;http://www.cnblogs.com/Leo_wl/p/4418663.html 希望多多提出宝贵意见&#xff0c;谢谢&#xff01;&#xff01;&#xff01; DDD是一套强大的思想工具&…

前端学习(2012)vue之电商管理系统电商系统之手动为upload组件添加请求头

目录结构 router.js import Vue from vue import Router from vue-router import Login from ./components/Login.vue import Home from ./components/Home.vue import Welcome from ./components/Welcome.vue import Users from ./components/user/Users.vue import Right fr…

Shell入门教程:算术运算

Bash的算术运算有以下几种方法&#xff1a; 序号名称语法范例1算术扩展$((算术式))r$((25*8))2使用外部程序expr 算术式rexpr 4 53使用 $[]$[算术式]r$[45]4使用内置命令 declaredeclare -i 变量算式式declare -i r8165使用内置命令 letlet 算术式let r816第一节&#xff1a;算…

计算器、中文转数字

计算器 1.字符串转整数 string s "458";int n 0; for (int i 0; i < s.size(); i) {char c s[i];n 10 * n (c - 0); } // n 现在就等于 458 2.处理加减法 我们拿字符串算式1-123为例&#xff0c;来说一个很简单的思路&#xff1a; 1、先给第一个数字加…