当前位置: 首页 > news >正文

算法修炼Day51|● 309.最佳买卖股票时机含冷冻期 ● 714.买卖股票的最佳时机含手续费

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

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

1.思路

初始化dp[i][j]数组,表示第i天的最大利润为dp[i][j].
精确的定义状态是个难点,可以定义四种状态:持有股票(当天买入、前一天持有、前一天为保持卖出的状态)、卖出状态(前一天为冷冻期、前一天为卖出状态)、卖出股票(前一天持有股票当天卖出+prices[i])、冷冻期(前一天卖出的状态)

2.代码实现

 1class Solution {2    public int maxProfit(int[] prices) {345        int len = prices.length;67        int[][] dp = new int[len][4];8        // 四种状态9        // dp[i][0] 持有股票;dp[i][1] 保持卖出股票;dp[i][2]卖出股票;dp[i][3]冷冻期
10
11
12        // 初始化dp数组
13        dp[0][0] = -prices[0];
14        dp[0][1] = 0;
15        dp[0][2] = 0;
16        dp[0][3] = 0;
17
18        for (int i = 1; i < len; i++) {
19            // 持有股票:①前一天持有 ②当天买入 ③冷冻期下一天买入
20            dp[i][0] = Math.max(dp[i - 1][0], Math.max(dp[i - 1][3] - prices[i], dp[i - 1][1] - prices[i]));
21            // 保持卖出股票:①冷冻期②前一天就是保持卖出状态
22            dp[i][1] = Math.max(dp[i - 1][3], dp[i - 1][1]);
23            // 卖出股票操作
24            dp[i][2] = dp[i - 1][0] + prices[i];
25            // 冷冻期
26            dp[i][3] = dp[i - 1][2];
27        }
28
29        return Math.max(dp[len - 1][1], Math.max(dp[len - 1][2], dp[len - 1][3]));
30    }
31}
32

3.复杂度分析

时间复杂度:O(n).
空间复杂度:O(n).

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

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

1.思路

初始化dp[][][]数组,确定两种状态:持有股票和不持有股票,进行状态转移推演即可。

2.代码实现

 1class Solution {2    public int maxProfit(int[] prices, int fee) {3        int len = prices.length;45        // dp[i][j]67        int[][] dp = new int[len][2];8        dp[0][0] = -prices[0];9        // dp[0][1] = 0; 
10        for (int i = 1; i < len; i++) {
11            // 持有状态:①当天买入;②前一天持有
12            dp[i][0] = Math.max(dp[i - 1][0], dp[i - 1][1] - prices[i]);
13            // 不持有状态:①前一天就是卖出状态;②当天卖出
14            dp[i][1] = Math.max(dp[i - 1][1], dp[i - 1][0] + prices[i] - fee);
15        }
16
17        return dp[len - 1][1];
18    }
19}
20

3.复杂度分析

时间复杂度:O(n).
空间复杂度:O(n).

http://www.lryc.cn/news/131724.html

相关文章:

  • LVS-DR模型实例
  • Vue面试题
  • 使用图像处理算法检测金属表面的生锈区域: Python实现及步骤解析
  • 通过爬虫抓取上市企业利润表并在睿思BI中展示
  • 填充柄功能
  • Python爬虫性能优化:多进程协程提速实践指南
  • mongodb export(2023新)
  • css-flex使用
  • SAP安全库存-安全库存共享、安全库存简介
  • CentOS自己搭建时钟同步服务实操
  • 高阶数据结构-图
  • Linux/Ubuntu 的日常升级和安全更新,如何操作?
  • Linux自动挂载U盘
  • Edge浏览器免费使用GPT3.5
  • 面试题--redis篇
  • Android Studio 新建module报错:No signature of method
  • python使用dir()函数获取对象中可用的属性和方法(看不到python源码又想知道怎么调用,DLL调用分析,SDK二次开发技巧)
  • 【MySQL系列】SQL语句入门(创建删除操作)、字符集和数据类型详解
  • 谈谈召回率(R值),准确率(P值)及F值
  • 【脚本推荐】网页字体渲染插件
  • c++——c/c++中的static和const
  • 解决git:‘remote-http‘ 不是一个 git 命令错误提示
  • 深度学习入门-3-计算机视觉-卷积神经网络
  • 前端面试:【闭包】JavaScript世界的神秘法术
  • Ubuntu20 ctrl+alt+T无法打开终端
  • leetcode 387.字符串中第一个唯一字符
  • 【三次握手】TCP三次握手由入门到精通(完整版)
  • Java 异步计算
  • 【FAQ】调用视频汇聚平台EasyCVR的iframe地址,视频无法播放的原因排查
  • ⛳ TCP 协议面试题