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

做网站的工作时间本地推荐本地推荐

做网站的工作时间,本地推荐本地推荐,做虾皮网站赚钱吗,兰州网站制作公司哪个好第九章 动态规划part11 123.买卖股票的最佳时机III // 版本一 class Solution {public int maxProfit(int[] prices) {int len prices.length;// 边界判断, 题目中 length > 1, 所以可省去if (prices.length 0) return 0;/** 定义 5 种状态:* 0: 没有操作, 1: 第一次买入…

第九章 动态规划part11

  •  123.买卖股票的最佳时机III  
    // 版本一
    class Solution {public int maxProfit(int[] prices) {int len = prices.length;// 边界判断, 题目中 length >= 1, 所以可省去if (prices.length == 0) return 0;/** 定义 5 种状态:* 0: 没有操作, 1: 第一次买入, 2: 第一次卖出, 3: 第二次买入, 4: 第二次卖出*/int[][] dp = new int[len][5];dp[0][1] = -prices[0];// 初始化第二次买入的状态是确保 最后结果是最多两次买卖的最大利润dp[0][3] = -prices[0];for (int i = 1; i < len; i++) {dp[i][1] = Math.max(dp[i - 1][1], -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[len - 1][4];}
    }

    思路:于上两个股票买卖问题的区别在于这道题限制了买卖次数,需要定义五种状态:0、1、2、3、4来代表不同的状态。然后使用递推公式对dp数组进行更新。

  •  188.买卖股票的最佳时机IV 
    // 版本一: 三维 dp数组
    class Solution {public int maxProfit(int k, int[] prices) {if (prices.length == 0) return 0;// [天数][交易次数][是否持有股票]int len = prices.length;int[][][] dp = new int[len][k + 1][2];// dp数组初始化// 初始化所有的交易次数是为确保 最后结果是最多 k 次买卖的最大利润for (int i = 0; i <= k; i++) {dp[0][i][1] = -prices[0];}for (int i = 1; i < len; i++) {for (int j = 1; j <= k; j++) {// dp方程, 0表示不持有/卖出, 1表示持有/买入dp[i][j][0] = Math.max(dp[i - 1][j][0], dp[i - 1][j][1] + prices[i]);dp[i][j][1] = Math.max(dp[i - 1][j][1], dp[i - 1][j - 1][0] - prices[i]);}}return dp[len - 1][k][0];}
    }// 版本二: 二维 dp数组
    class Solution {public int maxProfit(int k, int[] prices) {if (prices.length == 0) return 0;// [天数][股票状态]// 股票状态: 奇数表示第 k 次交易持有/买入, 偶数表示第 k 次交易不持有/卖出, 0 表示没有操作int len = prices.length;int[][] dp = new int[len][k*2 + 1];// dp数组的初始化, 与版本一同理for (int i = 1; i < k*2; i += 2) {dp[0][i] = -prices[0];}for (int i = 1; i < len; i++) {for (int j = 0; j < k*2 - 1; j += 2) {dp[i][j + 1] = Math.max(dp[i - 1][j + 1], dp[i - 1][j] - prices[i]);dp[i][j + 2] = Math.max(dp[i - 1][j + 2], dp[i - 1][j + 1] + prices[i]);}}return dp[len - 1][k*2];}
    }

    思路:该题与上题的区别在于该题是至多能k次,所以二维数组需要2*k+1的维度,1、3、5等奇数代表持有股票,2、4、6等偶数代表不持有股票。然后根据递推公式进行遍历递推。再进行dp数组的初始化。

http://www.hengruixuexiao.com/news/17241.html

相关文章:

  • 2017做网站挣钱百度权重查询爱站网
  • 网站首页布局的设计国内重大新闻十条
  • 百度网站推广找谁做网站推广关键词工具
  • 兰州市做网站的公司有哪些网络营销方法有什么
  • 女生做网站编辑怎么样扶贫832网络销售平台
  • 网站开发是干什么的淘宝网官方网站
  • 免费做网站建设一键优化是什么意思
  • 中山三水网站建设淘宝关键词排名
  • 金华金义东轨道建设网站哪些平台可以免费发布产品
  • 1688货源网登录seo蜘蛛池
  • 新网建立网站百度做免费推广的步骤
  • 外贸高端网站开发百度推广售后客服电话
  • 全球推广seo查询在线
  • 网页设计如何建立网站小米的推广软文
  • 长沙可以做网站的公司站长素材官网免费
  • 网站页面结构百度推广登录官网
  • 网页浏览器的单词西安seo顾问公司
  • 网站色调选择珠海网络推广公司
  • 在网上帮做图片的网站西安seo外包行者seo06
  • 做百度手机网站点击软八八网
  • 创意活动策划网站视频号关键词搜索排名
  • 内容营销策略网络营销的优化和推广方式
  • 做老师讲课视频的教育网站市场营销策划方案模板
  • 张家港手机网站建设深圳龙岗区布吉街道
  • 武汉做网站制作搜索推广营销
  • wordpress不居中优化方案官方网站
  • wordpress如何查看插件乌海网站seo
  • 建行网上银行河南seo和网络推广
  • 软件开发项目总结报告微信搜一搜seo优化
  • 网站经营性备案互联网营销是什么