首页 > 其他分享 >day51

day51

时间:2023-03-06 10:56:29浏览次数:32  
标签:状态 int prices day51 卖出 冷冻 dp

1、leetcode309 最佳买卖股票时机含冷冻期

  1. 动规五部曲

    1. dp[i] [j] : 第i天状态j时,所能获得的最大金额
      • 持有股票 j=0
        • 之前就处于买入状态,之后无操作 dp[i] [0] = dp[i-1] [0]
        • 当天买入 (之前处于不持有股票状态,且要经历完一天冷冻期 ==》j=1,j=3)
      • 不持有股票
        • 前两天就卖出,刚经历完了一天的冷冻期 or 前一天就是卖出股票的状态,之后无操作(冷冻期过了很久了) j=1
        • 当天卖出 j=2(之前处于股票持有状态j=0)
      • 冷冻期
        • 当天为冷冻期 j=3(前一天处于卖出状态j=2)
    2. 递归公式
      1. dp[i] [0] = max( dp[i-1] [0], dp[i-1] [1]-prices[i], dp[i-1] [3]-prices[i] )
        1. 之前就处于买入状态,之后无操作
        2. 当天买入
          1. 前两天就卖出,经历完了一天的冷冻期后,当天买入【前一天为冷冻期】
          2. 前一天是保持卖出股票的状态
      2. dp[i] [1] = max( dp[i-1] [1],dp[i-1] [3] )
        1. 前一天就是卖出股票的状态,之后无操作【j=1】
        2. 前两天就卖出,经历完了一天的冷冻期【前一天为冷冻期】【j=3】
      3. dp[i] [2] = dp[i-1] [0] + prices[i]
      4. dp[i] [3] = dp[i-1] [2]
    3. 初始化
      1. dp[0] [0] = -prices[0]
      2. dp[0] [1] = 0
      3. dp[0] [2] = 0
      4. dp[0] [3] = 0
    4. 遍历顺序
      • 从前向后遍历
    5. 举例
  2. 代码

    class Solution {
        public int maxProfit(int[] prices) {
            int[][] dp = new int[prices.length][4];
            dp[0][0] = -prices[0];
    
            for(int i=1; i<prices.length; i++) {
                dp[i][0] = Math.max(dp[i-1][0], Math.max(dp[i-1][1]-prices[i], dp[i-1][3]-prices[i]));
                dp[i][1] = Math.max(dp[i-1][1], dp[i-1][3]);
                dp[i][2] = dp[i-1][0] + prices[i];
                dp[i][3] = dp[i-1][2];
            }
    
            return Math.max(dp[prices.length-1][1], Math.max(dp[prices.length-1][2], dp[prices.length-1][3]));
    
        }
    }
    

2、leetcode714 买卖股票的最佳时机含手续费

  1. 动规五部曲

    1. dp[i] [j] : 第i天状态j时,所能获得的最大金额
      • j=0:持有股票
        • 之前就处于持有状态,之后无操作
        • 当天买入(之前处于不持有状态)
      • j=1:不持有股票
        • 之前就处于不持有状态,之后无操作
        • 当天卖出,并扣除手续费(之前处于持有状态)
    2. 递归公式
      1. dp[i] [0] = max(dp[i-1] [0],dp[i-1] [1] - prices[i])
      2. dp[i] [1] = max(dp[i-1] [1],dp[i-1] [0] + prices[i] -fee)
    3. 初始化
      1. dp[0] [0] = -prices[0]
      2. dp[0] [1] = 0
    4. 遍历顺序
      • 从前往后遍历
    5. 举例
  2. 代码

    class Solution {
        public int maxProfit(int[] prices, int fee) {
            int[][] dp = new int[prices.length][2];
            dp[0][0] = -prices[0];
    
            for(int i=1; i<prices.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] - fee);
            }
    
            return dp[prices.length-1][1];
    
        }
    }
    

标签:状态,int,prices,day51,卖出,冷冻,dp
From: https://www.cnblogs.com/hzj-bolg/p/17182946.html

相关文章

  • day51 -- 数据绑定和el,data的两种写法
    数据绑定单向绑定<divid="root">单向数据绑定:<inputtype="text"v-bind:value="name"><br>​</div><script>newVue({el:'#root',......
  • 进入python的世界_day51_Django之视图层、模板层
    一、路由分发django中应用都可以有自己独立的urls.py文件templates文件夹static文件夹能够让基于django开发的多个应用完全独立便于小组开发能分能收整个dj项目下......
  • day51(监听器,ajax)
    web监听器第一种监听(1).实现HttpSessionBindingListener接口(2).重写相关方法注意:在哪个类中实现了该接口,就会监听哪个类当这个类对象被设置session中时,会......
  • day51-正则表达式02
    正则表达式025.4正则表达式语法025.4.6捕获分组详见5.3.3例子packageli.regexp;importjava.util.regex.Matcher;importjava.util.regex.Pattern;//演示分......
  • 前端Vue2-Day51
    自定义指令:函数式/对象式://函数式directives:{//指令与元素成功绑定时执行。//指令所在模板被重新解析时也执行,......
  • 学习python-Day51
    今日学习内容静态文件及相关配置使用django步骤创建django项目并创建对应关系在urls.py中添加一组对应关系在APP的views.py中编写核心业务代码利用三板斧与前端做......
  • python学习Day51
    Day51今日内容概要表单标签知识补充CSS层叠样式表作用语法结构注释语法三种编写css的方式CSS选择器基本选择器组合选择器属性选择器分组与嵌套选择器伪......