• Day 51 | 309. 最佳买卖股票时机含冷冻期 & 714. 买卖股票的最佳时机含手续费 & 300. 最长递增子序列


     309. 最佳买卖股票时机含冷冻期 

    这题没看懂。。没看懂状态咋分的,每个状态的推导也没看懂。

     dp解题思路:

            本题分为四个状态,买入,保持卖出,卖出,冷冻期。

            具体状态如图:

     714. 买卖股票的最佳时机含手续费

    dp解题思路:

            本题与股票II的区别就是多了手续费。在卖出时减去手续费的金额即可。 

    本题分为两种状态:持有股票和不持有股票。

            持有股票分为买入/不动状态,不持有股票分为卖出/不动状态。

    1. public int maxProfit(int[] prices, int fee) {
    2. int[][] dp=new int[prices.length][2];
    3. dp[0][0]=-prices[0];
    4. for(int i=1;i
    5. dp[i][0]=Math.max(dp[i-1][1]-prices[i],dp[i-1][0]);
    6. dp[i][1]=Math.max(dp[i-1][0]+prices[i]-fee,dp[i-1][1]);
    7. }
    8. return Math.max(dp[prices.length-1][0],dp[prices.length-1][1]);
    9. }

    300. 最长递增子序列

    dp解题思路:

    ①确定dp数组以及下标含义

            dp[i]:下标[0,i],以nums[i]结尾的最长子序列长度

    ②确定递推公式

            每次遍历i只决定dp[i]的值,利用j下标遍历[0,i]的所有元素,若有比nums[i]小的元素,则令dp[i]=dp[j](j的最长子序列)长度+1.

            每次遍历j都对dp[i]进行判断是否比上次赋值的dp[i]大,取dp[i]的最大值即可。

                                    ​​​​​​​        ​​​​​​​        ​​​​​​​        dp[i]=max(dp[i],dp[j]+1);

            注意不是dp[i]与dp[j]+1比较,而是每次都给dp[i]赋值为dp[j]+1,取最大值。

    ③dp数组如何初始化

            给dp数组所有元素都初始化为1,代表初始最长子序列为1.

    ④确定遍历顺序

              从前向后遍历。

    ⑤举例推导dp数组

     注意最后结果返回dp元素的最大值。

  • 相关阅读:
    由一个按键程序引发的思考(下)
    NYIST计科ACM第四次招新赛( Round 2 )
    多通道振弦数据记录仪应用桥梁安全监测的解决方案
    中大型医院HIS系统源码 云HIS运维平台源码
    23-移动端布局
    四只股票的收盘价可视化
    ORB-SLAM2 ---- ORBextractor::operator()仿函数
    Redis之list类型
    JOSEF约瑟 10KV高压漏电保护继电器BLD-20 φ100mm 50-500mA 导轨安装
    3分钟了解 egg.js
  • 原文地址:https://blog.csdn.net/m0_56579820/article/details/127783139