代码随想录-训练营-day35

news/2025/2/23 12:32:29

309. 买卖股票的最佳时机含冷冻期 - 力扣(LeetCode)

这个题比起我们的买卖股票二来说多了一个冷冻期的说法,也就是我们卖出股票的第二天无法买入股票。

这样对我们而言,dp数组的含义,或者说dp数组中的状态显然就不能是简单的持有或者未持有股票了,事实上,我们不仅得多加一个冷冻期的状态,我们还得多加一个今天卖出股票的状态,因为我们的冷冻期必须是卖出股票的后一天。

综上所述,我们需要四个状态:0表示持有股票,1表示保持未持有股票(也就是已经度过冷冻期),2表示今天卖出股票,3表示冷冻期。

代码如下:

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int n=prices.size();
        if(!n)return 0;
        vector<vector<int>> dp(n+1,vector<int>(4,0));
        dp[0][0]=-prices[0];
        for(int i=1;i<n;++i){
            dp[i][0]=max(dp[i-1][0],max(dp[i-1][1]-prices[i],dp[i-1][3]-prices[i]));
            dp[i][1]=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 max(dp[n-1][1],max(dp[n-1][2],dp[n-1][3]));
    }
};

714. 买卖股票的最佳时机含手续费 - 力扣(LeetCode)

这个题的思路其实就是在我们的买卖股票的基础上添加一个基本的手续费,除此之外并没有不同。

代码如下:

class Solution {
public:
    int maxProfit(vector<int>& prices, int fee) {
        int n=prices.size();
        if(n==0)return 0;
        vector<vector<int>> dp(n+1,vector<int>(2,0));
        dp[0][0]=-prices[0];
        dp[0][1]=0;
        for(int i=1;i<n;++i){
            dp[i][0]=max(dp[i-1][0],dp[i-1][1]-prices[i]);
            dp[i][1]=max(dp[i-1][1],dp[i-1][0]+prices[i]-fee);
        }
        return dp[n-1][1];
    }
};

总结:

股票的问题也算是告一段落,其实不难看出,股票问题的主要变化点就在于dp数组的含义以及我们的递推公式,更准确地说是我们dp数组表示的状态差异。


http://www.niftyadmin.cn/n/5863403.html

相关文章

Next.js 学习-1

Next.js学习 引用&#xff1a;https://www.nextjs.cn/learn/basics/create-nextjs-app 先试试水吧&#xff0c;正好dify用的这个构建的前端项目。 使用 如果您尚未安装 Node.js&#xff0c;请 从此处安装。要求 Node.js 10.13 或更高版本。 好吧得用新的了&#xff0c;记得…

如何在 ubuntu 上使用 Clash 与 docker 开启代理拉起

如何在 ubuntu 上使用 Clash https://github.com/doreamon-design/clash/releases上面是clash 的地址 clash_2.0.24_linux_386.tar.gz 下载 386 的 如果你的电脑是inter tar -xzvf clash_2.0.24_linux_386.tar.gz 启动 ./clash 然后会在电脑上生成一个config的文件 /home/xxx/…

在VS中如何将控制台(console)项目改为窗口(window)项目

1. 修改属性&#xff1a; 2. 修改main函数 int WINAPI WinMain(_In_ HINSTANCE hInstance,_In_opt_ HINSTANCE hPrevInstance,_In_ LPSTR lpCmdLine,_In_ int nShowCmd) //int main()

国产编辑器EverEdit - 洞察秋毫!内置文件比较功能!

1 文件比较 1.1 应用场景 项目开发过程中&#xff0c;可能不同的部分会由不同的人在负责&#xff0c;存在一个文件多人编辑的情况&#xff0c;用户需要寻找差异&#xff0c;并将文档进行合并&#xff0c;比较专业的文本比较工具为BeyondCompare&#xff0c;WinMerge等。   如…

【部署优化篇十四】【十万字全景拆解:GitHub Actions自动化流水线设计圣经(DeepSeek工业级实践大公开)】

一、从手工作坊到智能工厂:CI/CD的革命之路 想象一下,你所在的公司每天要手工组装1000台手机,每个环节都靠老师傅肉眼检查——这就是没有CI/CD的软件开发现状。GitHub Actions的出现,就像给软件交付装上了特斯拉的超级工厂流水线。 DeepSeek的CI/CD演进史就是一部血泪史:…

springboot+dubbo+zookeeper的注册服务和调用实践

目录 zookeeper为什么可作为注册中心zookeeper注册中心优缺点启动zookeeper编写springboot项目提供dubbo服务1. 服务接口2. Springboot引入dubbo实现服务接口2.1 工程目录和依赖2.2 启动程序和application.properties2.3 DubboService 实现服务接口2.4 测试api&#xff0c;用于…

【排序算法】六大比较类排序算法——插入排序、选择排序、冒泡排序、希尔排序、快速排序、归并排序【详解】

文章目录 六大比较类排序算法&#xff08;插入排序、选择排序、冒泡排序、希尔排序、快速排序、归并排序&#xff09;前言1. 插入排序算法描述代码示例算法分析 2. 选择排序算法描述优化代码示例算法分析 3. 冒泡排序算法描述代码示例算法分析与插入排序对比 4. 希尔排序算法描…

WPF实现打印机控制及打印

在WPF中实现打印机控制和打印功能&#xff0c;通常需要使用System.Printing命名空间中的类来管理打印机和打印任务。以下是一个简单的示例&#xff0c;展示如何在WPF应用程序中实现打印功能。 1. 添加必要的引用 首先&#xff0c;确保在项目中引用了System.Printing命名空间。…