T1:给定一个数组 prices ,其中 prices[i] 表示股票第 i 天的价格。
在每一天,你可能会决定购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以购买它,然后在 同一天 出售。
返回 你能获得的 最大 利润

1、定义dp数组
dp[i][0]定义为第i+1天时手上没有股票的情况;
dp[i][1]定义为第i+1天时手上有股票的情况;

2、确定递归方程(状态转移方程)
手上没有股票时有两种情况:①卖出了股票,说明之前持有股票 ②今天没有进行交易,说明之前没有股票
针对① A = dp[i][1] + prices[i]
针对② B= dp[i][0]
因此dp[i][0] = max(A,B)

手上有股票也有两种情况:①今天买入了股票,说明之前未持有股票 ②今天没有进行交易
针对① C = dp[i][0] -prices[i]
针对② D = dp[i][1]
因此dp[i][1] = max(C,D)

3、确定边界
边界就是第一天有没有进行交易

dp[0][0] = 0
dp[0][1] = -prices[i]

4、确定输出
显然,dp中最后一天且卖出手上的股票为最优解

dp[prices.length][0]

代码如下

class Solution {public int maxProfit(int[] prices) {int length = prices.length;if(prices==null || length==1)return 0;int[][] dp = new int[length][2];//确定边界dp[0][0] = 0;dp[0][1] = -prices[0];//根据递归方程写出for(int i=1;i<length;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]);}return dp[length-1][0];}
}

T2: 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。

只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票

意味着只能进行一次买入卖出交易,因此转移方程的情况会有不同

1、定义dp数组
dp[i][0]定义为第i+1天时手上没有股票的情况;
dp[i][1]定义为第i+1天时手上有股票的情况;

2、确定递归方程(状态转移方程)
手上没有股票时有两种情况:①卖出了股票,说明之前持有股票 ②今天没有进行交易,说明之前没有股票
针对① A = dp[i][1] + prices[i]
针对② B= dp[i][0]
因此dp[i][0] = max(A,B)

手上有股票也有两种情况:①今天买入了股票,说明之前未持有股票,因为题目限制了只能买卖一次,因此之前不会有任何利润 ②今天没有进行交易
针对① C = -prices[i]
针对② D = dp[i][1]
因此dp[i][1] = max(C,D)

3、确定边界
边界就是第一天有没有进行交易

dp[0][0] = 0
dp[0][1] = -prices[i]

4、确定输出
显然,dp中最后一天且卖出手上的股票为最优解

dp[prices.length][0]

代码如下

class Solution {public int maxProfit(int[] prices) {int length = prices.length;if(prices==null || length==1)return 0;int[][] dp = new int[length][2];//确定边界dp[0][0] = 0;dp[0][1] = -prices[0];//根据递归方程写出for(int i=1;i<length;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],-prices[i]);}return dp[length-1][0];}
}

两道动态规划买股票的题相关推荐

  1. 从两道基础二分算法题谈check函数的写法

    第一题:愤怒的牛 loj链接 两道题目都是基础二分的模板题,先看第一题,题意为总共有nnn间牛舍,mmm头牛,要将mmm头牛安排在nnn间牛舍,为防止牛互相攻击,使两头牛之间的最小距离最大!最大! 最 ...

  2. 两道有趣的逻辑推理题

    海盗分金币 问题: 有5个海盗,按照等级从5到1排列.最大的海盗有权提议他们如何分享100枚金币.但其他人要对此表决,如果多数(所有人中的多数)反对,那他就会被杀死.他应该提出怎样的方案,既让自己拿到 ...

  3. 吾爱破解2023春节解题领红包--两道Android逆向初级题

    Android 1 使用开发者助手分析界面资源 定位按钮标签 在jadx-gui中,根据包名和类名定位代码,抠出来修改一下,放到Java在线编译网站上运行,得到flag 通关

  4. BAT七年经验,却抵不过外企面试的两道算法题?

    整理| 琥珀 出品| AI科技大本营 又遇年底跳槽季,如果你曾在 BAT 等互联网大厂有过较为丰富的工作经验,想要换份工作,面试时会主要考虑哪些因素? 面试外企,却被两道算法题难住? 近日,一位网友在 ...

  5. 两道概率题-供大家周末把玩

    两道概率题-供大家周末把玩 题目 1.给定一个函数rand5(),该函数能等概率生成1-5之间的整数(包括1和5),如何用该函数等概率生成整数1-7? 解法 本以为很简单,做了以后才发现其实并不简单, ...

  6. BAT 七年经验,却抵不过外企面试的两道算法题?

    整理| 琥珀 出品| AI科技大本营 又遇年底跳槽季,如果你曾在 BAT 等互联网大厂有过较为丰富的工作经验,想要换份工作,面试时会主要考虑哪些因素? 面试外企,却被两道算法题难住? 近日,一位网友在 ...

  7. 【算法】两道算法题根据提供字母解决解码方法和城市的天际线天际线问题

    算法目录 解码方法 Java解答参考: 天际线问题 Java解答参考: 大家好,我是小冷. 上一篇了解了项目相关的知识点 接下来看下两道算法题吧,用Java解答,可能更能激发一下大脑思考. 解码方法 ...

  8. 51信用卡两道编程题

    51信用卡两道编程题 1>输入一串字符,判断第二个字符串的字符是否都存在于第一个字符串,返回true,否则false,两个串中间有;号连接 如输入: ABCNB51;51NB 输出:true 解 ...

  9. 分享两道阿里P7究极难度算法题,满满干货指导

    缘起 深圳市腾讯计算机系统有限公司成立于1998年11月,是中国最大的互联网综合服务提供商之一,也是中国服务用户最多的互联网企业之一. 腾讯业务多元化,覆盖面广:社交.通信.娱乐全面开花.其中,腾讯Q ...

最新文章

  1. [补档][中山市选2011]杀人游戏
  2. 8、mybatis之增删改查
  3. 听说现在都考这些React面试题
  4. 不在一个局域网下,如何设置可以被远程登录的服务器[ubuntu]?【ssh登录】【不使用软件】
  5. Picasso通过URL获取--用户头像的圆形显示
  6. Atitit  记录方法调用参数上下文arguments
  7. linux服务器用的多的命令,linux服务器常用命令
  8. 计算机常见的编码规范
  9. 浅谈融云即时通讯服务「日志优化」
  10. 按键精灵---大漠完美注册
  11. cocos creator后台切入切出
  12. OS文件处理库python应用整理DIY
  13. android+cast+sdk,如何使用Android发现Chromecast设备?
  14. the mid-autumn festival
  15. 【程序源代码】微信小程序商城管理系统(java后台+小程序)
  16. 新版Edge检查项F12控制台改为英文
  17. uniapp:去掉微信小程序顶部的导航栏
  18. linux常用命令的英文单词缩写
  19. 通达信接口node筹码分布怎么修改参数?
  20. Ubuntu系统python3.6版本,networkx画关系图显示中文处理

热门文章

  1. python编程视频剪辑_你知道吗?Python也可以剪辑视频!
  2. Swift--Result of call to ‘xxx‘ is unused返回值未实现
  3. 计算机校内实践活动方案,2015年科技节活动方案及实施细则
  4. 数据包络java_外文翻译—模糊数据包络分析(DEA)模型和排序方法
  5. DeepViT、DeiT、CaiT、T2T、Cross-ViT、PiT、LeViT、CvT算法整理
  6. 加仓减仓口诀_加仓减仓的最佳方法:金字塔法则!
  7. 【unity】热浪扭曲效果
  8. 全链路设计师和全栈_成为全栈设计师意味着什么
  9. 黑马程序员8日python学习笔记
  10. Java版贪食蛇游戏的设计与实现毕业设计