LeetCode 309买卖股票的最佳时机含冷冻期 714买卖股票的最佳时机含手续费 | 代码随想录25期训练营day51
2023-12-14 14:07:26
动态规划算法9
LeetCode 309 买卖股票的最佳时机含冷冻期 2023.12.14
int maxProfit(vector<int>& prices) {
//1确定dp二维数组
//dp[i][0]表示遍历到第i天时持有股票的当前收入;dp[i][1]表示遍历到第i天时未持有股票的当前收入
//dp[i][2]表示遍历到第i天卖出股票的当前收入;dp[i][3]表示遍历到第i天时处于冷冻期的当前收入
vector<vector<int>> dp(prices.size(), vector<int>(4, 0));
//3初始化,第一天持有股票的收入为-prices[0],其他值为0
dp[0][0] = -prices[0];
//2确定递推公式,4确定遍历顺序
for (int i = 1; i < prices.size(); i++)
{
//dp[i][0]表示遍历到第i天时持有股票的当前收入;
//可能值:上一天持有股票,处于不持有股票期或冷冻期购买股票
dp[i][0] = max(max(dp[i-1][0], dp[i-1][1]-prices[i]), dp[i-1][3]-prices[i]);
//dp[i][1]表示遍历到第i天时未持有股票的当前收入;
//可能值:上一天未持有股票,处于不持有股票期的冷冻期
dp[i][1] = max(dp[i-1][1], dp[i-1][3]);
//dp[i][2]表示遍历到第i天时卖出股票的当前收入;
dp[i][2] = dp[i-1][0] + prices[i];
//dp[i][3]表示第i天时处于冷冻期的当前收入,值为上一天卖出股票后的收入
dp[i][3] = dp[i-1][2];
}
//输出答案为最后一天未持有股票或卖出股票或冷冻期的收入,取最大值
return max(max(dp[prices.size()-1][1], dp[prices.size()-1][2]),dp[prices.size()-1][3]);
}
LeetCode 714 买卖股票的最佳时机含手续费 2023.12.14
int maxProfit(vector<int>& prices, int fee) {
//1确定dp二维数组
//dp[i][0]表示遍历到第i天时持有股票的当前收入;dp[i][1]表示遍历到第i天时未持有股票的当前收入
vector<vector<int>> dp(prices.size(), vector<int>(2, 0));
//3初始化,第一天持有股票的收入为-prices[0],其他值为0
dp[0][0] = -prices[0];
//2确定递推公式,4确定遍历顺序
for (int i = 1; i < prices.size(); i++)
{
//第i天持有股票的收入=max(股票不卖(上一天持有股票的收入),昨天没持有买完今天的股票的收入)
dp[i][0] = max(dp[i-1][0], dp[i-1][1]-prices[i]);
//第i天未持有股票的收入=max(上一天未持有股票的收入,今天卖股票(包含手续费)的收入)
dp[i][1] = max(dp[i-1][1], dp[i-1][0]-fee+prices[i]);
}
return dp[prices.size()-1][1];
}
文章来源:https://blog.csdn.net/weixin_66706867/article/details/134992690
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!