力扣刷题--买卖股票的最佳时机含冷冻期

发布时间:2026/11/11 18:24:15
力扣刷题--买卖股票的最佳时机含冷冻期 题目给定一个整数数组prices其中第prices[i]表示第i天的股票价格 。​设计一个算法计算出最大利润。在满足以下约束条件下你可以尽可能地完成更多的交易多次买卖一支股票:卖出股票后你无法在第二天买入股票 (即冷冻期为 1 天)。注意你不能同时参与多笔交易你必须在再次购买前出售掉之前的股票。示例 1:输入:prices [1,2,3,0,2]输出:3解释:对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]示例 2:输入:prices [1]输出:0提供代码class Solution { public int maxProfit(int[] prices) { } }作答class Solution { public int maxProfit(int[] prices) { // 数组长度 int n prices.length; //当提供的股票价格小于等于1天则无法完成买入卖出 if(n 1) return 0; //dp0:买入 dp1:冷冻期 dp2:不持有、不冷冻 int dp0 -prices[0]; int dp1 0; int dp2 0; for(int i 1; i n; i){ int dp00 Math.max( dp0, dp2-prices[i]); int dp10 dp0 prices[i]; int dp20 Math.max( dp1, dp2); dp0 dp00; dp1 dp10; dp2 dp20; } return Math.max( dp1, dp2); } }思路核心dp Dynamic Programming即动态规划1由于数据是动态的没有固定规律所以需要明确第i天结束时股票的状态以及一共赚到的钱数。状态分为三种持有股票dp0未持有股票dp1和dp2.其中dp1是冷冻期dp2是非冷冻期。状态若为dp0持有股票金额昨天持有-今天价格买入即dp0-prices[i]如果是昨天就有则金额dp0.状态若为dp1未持有冷冻则金额昨天持有今天价格卖出dp0 prices[i].状态若为dp2未持有未冷冻会有两种情况。若昨天为冷冻期则金额dp1若昨天不是冷冻期则金额dp2.2 int dp0 -prices[0];的作用这是假设第一天就买入的情况下所赚金额。且dp0-prices[i]的情况保证了不会由于第一天买入过多带来的亏损。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询