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

o2o手机网站建设技术网站设计师专业

o2o手机网站建设技术,网站设计师专业,wordpress自定义文章类型翻页,中远智达网站建设121. 买卖股票的最佳时机 参考文章#xff1a;代码随想录 贪心 因为股票就买卖一次#xff0c;那么贪心的想法很自然就是取最左最小值#xff0c;取最右最大值#xff0c;那么得到的差值就是最大利润。 本次重点学习动态规划方法 1. dp数组#xff08;dp table#x…121. 买卖股票的最佳时机 参考文章代码随想录 贪心 因为股票就买卖一次那么贪心的想法很自然就是取最左最小值取最右最大值那么得到的差值就是最大利润。 本次重点学习动态规划方法 1. dp数组dp table以及下标的含义 dp[i][0] 表示第i天持有股票所得最多现金一开始现金为负数所以第一天就持有股票的话就是为负 dp[i][1] 表示第i天不持有股票所得最多现金 如果按照买入卖出来分别状态那什么都不干的状态并不能涵盖 所以应该按照持有和不持有来区分 持有包含今天买入和之前买入但是这几天一直没变动 不持有包含今天卖出和之前卖出之后没变动 这两种状态能够涵盖所有情况 2. 递推公式 如果第i天持有股票即dp[i][0] 那么可以由两个状态推出来 第i-1天就持有股票那么就保持现状所得现金就是昨天持有股票的所得现金 即dp[i - 1][0]第i天买入股票所得现金就是买入今天的股票后所得现金即-prices[i] 那么dp[i][0]应该选所得现金最大的所以dp[i][0] max(dp[i - 1][0], -prices[i]); 如果第i天不持有股票即dp[i][1] 也可以由两个状态推出来 第i-1天就不持有股票那么就保持现状所得现金就是昨天不持有股票的所得现金 即dp[i - 1][1]第i天卖出股票所得现金就是按照今天股票价格卖出后所得现金即prices[i] dp[i - 1][0] 同样dp[i][1]取最大的dp[i][1] max(dp[i - 1][1], prices[i] dp[i - 1][0]); 3.初始化 由递推公式 dp[i][0] max(dp[i - 1][0], -prices[i]); 和 dp[i][1] max(dp[i - 1][1], prices[i] dp[i - 1][0]);可以看出 其基础都是要从dp[0][0]和dp[0][1]推导出来而且在递推过程中只参考前一位所以有压缩的可能性 那么dp[0][0]表示第0天持有股票此时的持有股票就一定是买入股票了因为不可能有前一天推出来所以dp[0][0] - prices[0]; dp[0][1]表示第0天不持有股票不持有股票那么现金就是0所以dp[0][1] 0; 4.根据递推公式dp[i]都是由dp[i - 1]推导出来的那么一定是从前向后遍历 // 解法1 class Solution {public int maxProfit(int[] prices) {if (prices null || prices.length 0) return 0;int length prices.length;// dp[i][0]代表第i天持有股票的最大收益// dp[i][1]代表第i天不持有股票的最大收益int[][] dp new int[length][2];int result 0;dp[0][0] -prices[0];dp[0][1] 0;for (int i 1; i length; i) {dp[i][0] Math.max(dp[i - 1][0], -prices[i]);dp[i][1] Math.max(dp[i - 1][0] prices[i], dp[i - 1][1]);}return dp[length - 1][1];} }优化由于递推公式更新时只需要参考前一位的数值所以我们可以将空间压缩为2滚动更新数组 class Solution {public int maxProfit(int[] prices) {int len prices.length;int dp[][] new int[2][2];dp[0][0] - prices[0];dp[0][1] 0;for (int i 1; i len; i){dp[i % 2][0] Math.max(dp[(i - 1) % 2][0], - prices[i]);dp[i % 2][1] Math.max(dp[(i - 1) % 2][1], prices[i] dp[(i - 1) % 2][0]);}return dp[(len - 1) % 2][1];} } 122.买卖股票的最佳时机II 与上题区别可以买卖多次股票但是只能持有一个 只有递归公式有区别 如果第i天持有股票即dp[i][0] 那么可以由两个状态推出来 第i-1天就持有股票那么就保持现状所得现金就是昨天持有股票的所得现金 即dp[i - 1][0]第i天买入股票所得现金就是前一天不持有股票的现金再减去买入今天的股票后花费的现金即的 dp[i-1][1]-prices[i] 其他均与上题相同 class Solution { public:int maxProfit(vectorint prices) {int len prices.size();vectorvectorint dp(len, vectorint(2, 0));dp[0][0] - prices[0];dp[0][1] 0;for (int i 1; i len; i) {dp[i][0] max(dp[i - 1][0], dp[i - 1][1] - prices[i]); // 注意这里是和121. 买卖股票的最佳时机唯一不同的地方。dp[i][1] max(dp[i - 1][1], dp[i - 1][0] prices[i]);}return dp[len - 1][1];} }; 由于只需要用到dp[i-1][0],dp[i-1][1]来推导dp[i][0],dp[i][1] 我们可以把dp数组压缩到 2x2的数组滚动更新 // 版本二 class Solution { public:int maxProfit(vectorint prices) {int len prices.size();vectorvectorint dp(2, vectorint(2)); // 注意这里只开辟了一个2 * 2大小的二维数组dp[0][0] - prices[0];dp[0][1] 0;for (int i 1; i len; i) {dp[i % 2][0] max(dp[(i - 1) % 2][0], dp[(i - 1) % 2][1] - prices[i]);dp[i % 2][1] max(dp[(i - 1) % 2][1], prices[i] dp[(i - 1) % 2][0]);}return dp[(len - 1) % 2][1];} }; 本题也可以用贪心方法 // 贪心思路 class Solution {public int maxProfit(int[] prices) {int result 0;for (int i 1; i prices.length; i) {result Math.max(prices[i] - prices[i - 1], 0);}return result;}}
http://www.zqtcl.cn/news/553938/

相关文章:

  • 重庆建设工程招标网站淮南58同城网
  • 有域名在本机上做网站psd素材
  • 做拍拍拍拍网站网站宣传的劣势
  • 建设银行官方网站诚聘英才亚马逊店铺出售网站
  • 佛山房地产网站建设万网域名查询接口
  • 新建的网站必须要备案吗优购物网
  • 陕西省住房和城乡建设厅官方网站智能网站建设制作
  • 英语故事网站建设镇江大港信息港
  • 接单做一个网站多少钱商河网站建设
  • 网站建设s南昌网站建设服务
  • 免费的素材网站有哪些重庆网页设计公司排名
  • 内网网站建设汇报即商通网站建设推广
  • 企业建站系统是什么学校的网站怎么做的
  • 哪个大学的网站做的最好看网页制作教材素材
  • 南里商濮阳网站建设福田附件网站建设公司
  • 监控性能网站模板网页设计公司找哪家
  • 校园网站建设教程安卓小程序开发入门
  • 找人做网站需要注意什么seo工作
  • 做外贸有哪些好的网站有哪些内容响应式网站wordpress摄影
  • iis 7.0 搭建网站做门户网站公司
  • 织梦网站模版官网霸屏seo服务
  • 人工智能的网站开发app流程
  • 国外做贸易网站淄川区建设局网站
  • 做网站第一步要干啥wordpress 金币插件
  • 合肥如何做百度的网站网络服务主要包括哪几项
  • 影视网站的设计与实现网站搭建培训
  • 网站优化 前端怎么做泉州建设培训中心网站
  • 专业的无锡网站建设电子邮件无法发送wordpress
  • 适合手机的网站免费做二建题的网站
  • 用阳寿做交易的网站做网站公司 陕西渭南