首页 > 其他分享 >day48

day48

时间:2023-03-03 21:34:26浏览次数:32  
标签:int price maxProfit day48 prices public dp

1、leetcode121 买卖股票的最佳时机

  1. 暴力破解,超时

    class Solution {
        public int maxProfit(int[] prices) {
            int res = 0;
            for(int i=0; i<prices.length; i++) {
                for(int j=i+1; j<prices.length; j++) {
                    res = Math.max(res, prices[j]-prices[i]);
                }
            }
            return res;
        }
    }
    
  2. 贪心

    class Solution {
        public int maxProfit(int[] prices) {
            int low = Integer.MAX_VALUE;
            int res = 0;
    
            for(int i=0; i<prices.length; i++) {
                low = Math.min(low, prices[i]); //找到最低价格的股票购入点
                res = Math.max(res, prices[i]-low);
            }
    
            return res;
        }
    }
    
  3. 动规

    1. 定义动规数组

      • dp[i] [0]: 第i天持有股票时的最大金额【持有,可以是当天买入,也可以是前几天就买入】
      • dp[i] [1]: 第i天不持有股票时的最大金额【前几天就卖了or当天才卖】
    2. 递归公式

      • dp[i] [0] = Math.max(dp[i-1] [0] , -price[i])
      • dp[i] [1] = Math.max(dp[i-1] [1] , price[i] + dp[i-1] [0] )
    3. 初始化

      • dp[0] [0] = -price[0]
      • dp[0] [1] = 0
    4. 遍历顺序

      • 从前向后
    5. 举例

    6. 代码

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

2、leetcode 买卖股票的最佳时机Ⅱ

  1. 贪心

    1. 局部最优:收集每天的正利润,全局最优:求得最大利润

    2. 代码

      class Solution {
          public int maxProfit(int[] prices) {
              int maxBenefit = 0;
              for(int i=1; i<prices.length; i++) {
                  maxBenefit += Math.max(prices[i]-prices[i-1], 0);//累加每一天的正利润
              }
              return maxBenefit;
          }
      }
      
  2. 动规

    1. 定义动规数组

      • dp[i] [0]: 第i天持有股票时的最大金额
        • 之前买入 dp[i] [0] = dp[i-1] [0]
        • 当天买入
          • 之前卖了,当天买 dp[i] [0] = dp [i-1] [1] -prices[i]
          • 当天才卖,当天又买 dp[i] [0] = dp [i-1] [0] + prices[i] - prices[i] = dp [i-1] [0]
      • dp[i] [1]: 第i天不持有股票时的最大金额【前几天就卖了or当天才卖】
        • 之前卖了 dp[i] [1] = dp[i-1] [1]
        • 当天才卖 dp[i] [1] = dp[i-1] [0] + prices[i]
    2. 递归公式

      • dp[i] [0] = Math.max(dp[i-1] [0] ,dp [i-1] [1] -prices[i])
      • dp[i] [1] = Math.max(dp[i-1] [1] , price[i] + dp[i-1] [0] )
    3. 初始化

      • dp[0] [0] = -price[0]
      • dp[0] [1] = 0
    4. 遍历顺序

      • 从前向后
    5. 举例

    6. 代码

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

标签:int,price,maxProfit,day48,prices,public,dp
From: https://www.cnblogs.com/hzj-bolg/p/17177034.html

相关文章

  • 【算法训练营day48】LeetCode198. 打家劫舍 LeetCode213. 打家劫舍II LeetCode337. 打
    LeetCode198.打家劫舍题目链接:198.打家劫舍独上高楼,望尽天涯路dp[i]表示的是偷窃0-i房屋所能获得的最大金额。classSolution{public:introb(vector<int>&n......
  • day48 连接数据库
    链接数据库软件连接命令行连接mysql-uroot-p123456​updatemysql.usersetauthentication_string=password('123456')whereuser='root'andHost='localho......
  • 进入python的世界_day48_Django初始
    一、纯手撸web框架1.先搭服务端​ 1.因为浏览器就可以当成C\S开发架构的C客户端,我们先写一个简单的服务端importsocketserver=socket.socket()#这里括号不改任......
  • 代码随想录day48 | 198.打家劫舍 213.打家劫舍II 337.打家劫舍III
    198.打家劫舍题目|文章思路数组以及下标含义dp[j]:当偷到第j家时所能获得的最多的金钱递推公式dp[j]=max(dp[j-1],dp[j-2]+nums[i])当偷到第j家时,如果偷......
  • day48-JDBC和连接池04-2
    JDBC和连接池04-210.数据库连接池10.5Apache-DBUtils10.5.1resultSet问题先分析一个问题在之前的程序中,执行sql语句后返回的结果集存在如下问题:关闭connection后......
  • day48-JDBC和连接池04
    JDBC和连接池0410.数据库连接池10.1传统连接弊端分析传统获取Connection问题分析传统的JDBC数据库连接使用DriverManager来获取,每次向数据库建立连接的时候都要将......
  • 学习python-Day48
    今日学习内容JS获取用户输入有两种方式:普通数据(输入、选择)​ 标签对象.value文件数据(上传)​ 标签对象.files​ 标签对象.files[0]JS类属性操作let标签......
  • python学习Day48
    Day48今日内容概要Navicat可视化软件多表查询练习题python操作MySQL获取命令的执行结果SQL注入问题基础用户登录SQL语句(记忆)知识点额外补充今日内容详细......