当前位置: 首页 > news >正文

做淘宝店铺标志的网站鲁中网站

做淘宝店铺标志的网站,鲁中网站,知乎 wordpress主题,包头市网站建设公司第五十天| 第九章 动态规划 part11 123. 买卖股票的最佳时机III 188. 买卖股票的最佳时机IV 一、123. 买卖股票的最佳时机III#xff08;难难难难难#xff09; 题目链接#xff1a;https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-iii/ 题目介绍#xff…第五十天| 第九章 动态规划 part11 123. 买卖股票的最佳时机III 188. 买卖股票的最佳时机IV 一、123. 买卖股票的最佳时机III难难难难难 题目链接https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-iii/ 题目介绍 给定一个数组它的第 i 个元素是一支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成两笔交易。 **注意**你不能同时参与多笔交易你必须在再次购买前出售掉之前的股票。 示例 1: 输入prices [3,3,5,0,0,3,1,4] 输出6 解释在第 4 天股票价格 0的时候买入在第 6 天股票价格 3的时候卖出这笔交易所能获得利润 3-0 3 。随后在第 7 天股票价格 1的时候买入在第 8 天 股票价格 4的时候卖出这笔交易所能获得利润 4-1 3 。思路 注意本题是最多买卖两次股票 DP五部曲 1确定dp数组及下标含义 一天一共就有五个状态 没有操作 其实我们也可以不设置这个状态第一次持有股票第一次不持有股票第二次持有股票第二次不持有股票 dp[i][j]中 i表示第i天j为 [0 - 4] 五个状态dp[i][j]表示第i天状态j所剩最大现金。五个状态分别如下 dp[i][0]: 表示第i天不操作股票的时候手中的最大金额(也就是0) dp[i][1]: 表示第i天第一次持有该股票手中的最大金额 dp[i][2]: 表示第i天第一次不持有该股票手中的最大金额 dp[i][3]: 表示第i天第二次持有该股票手中的最大金额 dp[i][4]: 表示第i天第二次不持有该股票手中最大的金额2确定递推公式 和I、II一样的思路 dp[i][1] Math.max(dp[i-1][1], dp[i-1][0]-prices[i]); dp[i][2] Math.max(dp[i-1][2], dp[i-1][1]prices[i]); dp[i][3] Math.max(dp[i-1][3], dp[i-1][2]-prices[i]); dp[i][4] Math.max(dp[i-1][4], dp[i-1][3]prices[i]);3初始化dp数组 dp[0][0] 0; dp[0][1] -prices[0]; dp[0][2] 0; dp[0][3] -prices[0]; dp[0][4] 0;分别表示的含义是 1dp[0][0]第0天没有任何操作手里的金额是0 2dp[0][1]第0天第一次持有股票手里的金额就是买第0天的股票花掉的 3dp[0][2]第0天第一次不持有股票手里的金额就是买完再卖了第0天的股票也就是0 4dp[0][3]为什么会出现第二次持有呢可以当作第一天买了又卖了然后再买 5dp[0][4]同理。4确定遍历顺序 正序 5打印dp数组 代码 class Solution {public int maxProfit(int[] prices) {if (prices null || prices.length 0) return 0;// (1)确定dp数组及下标含义// dp[i][0]: 表示第i天不操作股票的时候手中的最大金额(也就是0)// dp[i][1]: 表示第i天第一次持有该股票手中的最大金额// dp[i][2]: 表示第i天第一次不持有该股票手中的最大金额// dp[i][3]: 表示第i天第二次持有该股票手中的最大金额// dp[i][4]: 表示第i天第二次不持有该股票手中最大的金额int[][] dp new int[prices.length][5];// (3)初始化dp数组dp[0][1] -prices[0];dp[0][3] -prices[0];// (4)确定遍历顺序for (int i 1; i prices.length; i) {// (2)确定递推公式dp[i][1] Math.max(dp[i-1][1], dp[i-1][0]-prices[i]);dp[i][2] Math.max(dp[i-1][2], dp[i-1][1]prices[i]);dp[i][3] Math.max(dp[i-1][3], dp[i-1][2]-prices[i]);dp[i][4] Math.max(dp[i-1][4], dp[i-1][3]prices[i]);}return dp[prices.length-1][4];} }注意 这里的返回值再强调一下 首先众所周知你不持有股票手里的金额一定是大于持有股票的所以返回的状态一定是偶数状态。那为什么不返回状态2呢 是因为状态4其实是包含了状态2的因为如果状态2达到最大值状态4一定会保持这个最大值的。因此直接返回状态4即可。 二、188. 买卖股票的最佳时机IV 题目链接https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-iv/ 题目介绍 给你一个整数数组 prices 和一个整数 k 其中 prices[i] 是某支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。也就是说你最多可以买 k 次卖 k 次。 **注意**你不能同时参与多笔交易你必须在再次购买前出售掉之前的股票。 示例 1 输入k 2, prices [2,4,1] 输出2 解释在第 1 天 (股票价格 2) 的时候买入在第 2 天 (股票价格 4) 的时候卖出这笔交易所能获得利润 4-2 2 。思路 注意本题是最多买卖k次股票根据上道题可以推算出本题只需要把握一些关键的边界点即可 1dp数组的初始化长度2k12初始化dp数组奇数状态初始为-prices[0]边界是 2 * k3递推公式需要一个j表示状态j从0开始每次循环2因此到最后一位2k时j2k-2。因此j的边界是j 2k - 1; 代码 class Solution {public int maxProfit(int k, int[] prices) {if (prices null || prices.length 0) return 0;int[][] dp new int[prices.length][2*k1];for (int i 1; i 2*k; i 2) {dp[0][i] -prices[0];}for (int i 1; i prices.length; i) {for (int j 0; j 2*k-1; j 2) {dp[i][j 1] Math.max(dp[i-1][j1], dp[i-1][j] - prices[i]);dp[i][j 2] Math.max(dp[i-1][j2], dp[i-1][j1] prices[i]);}}return dp[prices.length - 1][2*k];} }
http://www.dnsts.com.cn/news/157013.html

相关文章:

  • 南宁网站建设_seo优化服务公司做体育类网站素材
  • 智慧政务门户网站建设方案浏览器大全下载
  • 米拓网站建设-app定制开发长春优化所
  • 网站的总规划书页面布局标准格式
  • 北京网站建设公司内江上海动易 网站
  • 开创云网站建设网站内容 内链
  • 济南手机网站开发公司网站建设 国风网络
  • 网站开发技术与应用试验报告4vps 安装 wordpress
  • 做网站需要什么费用哪个做网站平台好
  • 是在百度中建设网站?宝塔window搭建wordpress
  • a站网址禁用 wordpress 自带 jquery
  • 校园网站建设招标公告品牌管理
  • 树莓派 做网站关键词排名优化公司成都
  • 重庆网站建设重庆零臻科技价影响网站速度的因素
  • 能免费建网站吗福州企业网站建站模板
  • 资料库网站应该怎么做工程项目流程八个阶段
  • 网站建设问题及对策小学网站建设方案
  • 代前导页的网站单页设计多少钱
  • 做网站职员工资外贸网站的作用
  • 通信科技网站设计网站开发技术公司
  • 广州视频网站建站公司网站建设的毕业设计选题管理系统
  • 高仿酒网站怎么做手机网游
  • o2o网站建设信息wordpress图片轮播效果
  • 外贸 网站外链交换网站建设验收报告
  • 有网址如何做网站赚钱常州网站建设企业网站制作
  • 设计师 英文网站wordpress 学校模板
  • 南山模板网站建设公司鄂尔多斯网站制作
  • 自己免费网站建设电子商务网站建设期末
  • 建站流程新手搭建网站第一步国和建设集团网站
  • 梧州网站建设制作刘素云网站脱孝怎样做