leetcode 最佳买卖股票时机含冷冻期
2024-09-07 20:00:32
这道题算是股票问题的变体之一,主要在于不限制交易次数而存在冷冻期,所以我们需要对我们的dp数组进行改变,第一维是指第几天,第二维是指是否持有股票,在这里因为不限制交易次数k,所以并未涉及第三维度。
同时,在这里我的状态转移方程为:
第i天未持有股票的可能性有:1.第i-1天未持有股票 2.第i-1天持有股票后卖出了。
dp[i][0]=Math.max(dp[i-1][0],dp[i-1][1]+prices[i-1]);
第i天持有股票的可能性有:1.第i-1天持有股票 2.第i-1天未持有股票,且非冷冻期买入。此时第二种情况为dp[i-2][0]-prices[i-1],原因在于:由上一个方程可知,dp[i-1][0]=Math.max(dp[i-2][0],dp[i-2][1]+prices[i-2]);我们需要的是非冷冻期的买入,所以取dp[i-2][0].
不妨设想,冷冻期如果不是两天,而是k天,我们也可以直接取为dp[i-k][0];
dp[i][1]=Math.max(dp[i-1][1],dp[i-2][0]-prices[i-1]);
public int maxProfit(int[] prices) { int [][] dp=new int[prices.length+1][3]; dp[0][0]=dp[1][0]=0;
dp[0][1]=Integer.MIN_VALUE;
dp[1][1]=-prices[0];
for(int i=2;i<=prices.length;i++)
{
dp[i][0]=Math.max(dp[i-1][0],dp[i-1][1]+prices[i-1]);
dp[i][1]=Math.max(dp[i-1][1],dp[i-2][0]-prices[i-1]);
} return dp[prices.length][0];
}
最新文章
- STC系列STC10F芯片解密STC10L单片机破解复制技术
- linux中模块的构建,传参,和printk函数的简单使用
- cf558c(bfs)
- Spring + Mybatis 使用 PageHelper 插件分页
- Django基础——Model篇(二)
- 基础DOM和CSS操作(三)
- C# 操作 Word 修改word的高级属性中的自定义属性2
- jQuery源码整体结构(源码2.0.3)
- ViewPager 详解(二)---详解四大函数
- 命令行工具命令 - run包到手机里
- 【线段树】【3-21个人赛】【同样的problemB】
- 香蕉派 BPI-M1+ 双核开源硬件单板计算机
- Redis集群环境安装指南
- UE4新手编程之创建C++项目
- HTTPClient网络异常:java.lang.IllegalStateException: Content has been consumed
- springboot测试、打包、部署
- 使用HTML meta no-cache标签来禁用缓存
- DataReader分页性能测试
- JedisCluster
- day73 中间件 以及模板引擎
热门文章
- SqlServer常用语句整理
- C++ 标准模板库(STL)——算法(Algorithms)的用法及理解
- Ubuntu18.04 安装opensips,实现局域网内sip语音视频通话
- 单细胞分析实录(17): 非负矩阵分解(NMF)代码演示
- Java多线程系列-基本概念
- 第一篇 -- Jmeter的安装下载
- Pelles C 五光十色中的一抹经典
- OpenFaaS实战之四:模板操作(template)
- Centos 7 安装mysql5.7 nginx tomcat
- 5G时代,视频会议的未来