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

代码训练营第53天:动态规划part12|leetcode309买卖股票的最佳时期含冷静期|leetcode714买卖股票的最佳时机含手续费

leetcode309:买卖股票的最佳时机含冷冻期

文章讲解:leletcode309

leetcode714:买卖股票的最佳时机含手续费

文章讲解:leetcode714

目录

1,leetcode309 买卖股票的最佳时机含冷冻期

2,leetcode714 买卖股票的最佳时机含手续费


1,leetcode309 买卖股票的最佳时机含冷冻期

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

我的理解是,股票问题其实是个自动机问题,每一步递推实际上是自动机的状态变化过程

具体可以区分出如下四个状态:

  • 状态一:持有股票状态(今天买入股票,或者是之前就买入了股票然后没有操作,一直持有)
  • 不持有股票状态,这里就有两种卖出股票状态
    • 状态二:保持卖出股票的状态(两天前就卖出了股票,度过一天冷冻期。或者是前一天就是卖出股票状态,一直没操作)
    • 状态三:今天卖出股票
  • 状态四:今天为冷冻期状态,但冷冻期状态不可持续,只有一天!

实际上这个状态转移图一出来,逐个状态分析即可。

2,leetcode714 买卖股票的最佳时机含手续费

其实在之前的递推中,只要加入在购买的时候减去手续费就可以了。但是在这种情况下[1]就不一定是最大的,需要两个状态求max

class Solution {
public:
    int maxProfit(vector<int>& prices, int fee) {
        int n = prices.size();
        vector<vector<int>> dp(n, vector<int>(2, 0));
        dp[0][0] -= prices[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 max(dp[n - 1][0], dp[n - 1][1]);
    }
};


http://www.kler.cn/news/107885.html

相关文章:

  • vue表格列表导出excel
  • 中文编程开发语言工具系统化教程零基础入门篇和初级1专辑课程已经上线,可以进入轻松学编程
  • 【目标检测】Visdrone数据集和CARPK数据集预处理
  • SQL中的非重复计数(进阶)
  • 项目管理概论:什么是项目、项目管理的重要性、成功的标准包含什么以及相关笔记
  • Vue3响应式对象: ref和reactive
  • C++STL---Vector、List所要掌握的基本知识
  • RGB-T Salient Object Detection via Fusing Multi-Level CNN Features
  • python opencv之图像分割、计算面积
  • [cpp primer随笔] 14. 类的构造函数
  • Winsows QT5.15安装教程——组件务必要选上Sources
  • vue3动态引入图片(:src)
  • k8s中 pod 或节点的资源利用率监控
  • 【HarmonyOS】鸿蒙操作系统架构
  • 【SEC 学习】Vim 的基本使用
  • Proteus仿真--花样流水灯(仿真文件+程序)
  • 驱动day8
  • List 3.5 详解原码、反码、补码
  • 阿里云/腾讯云国际站代理:国际腾讯云的优势
  • Shopee买家通系统全自动化操作简单方便又快速
  • 开发者常用的API汇总,含免费次数
  • 【C语言_文件_进程_进程间通讯 常用函数/命令 + 实例】.md_update:23/10/27
  • 【ROS入门】机器人系统仿真——URDF集成Gazebo
  • Python学习笔记合集(Matplotlib总结)
  • Linux下控制GPIO的三种方法
  • 使用Spring Data Elasticsearch 进行索引的增、删、改、查
  • 第二次课10.28
  • 监控数据控中的数据表
  • Linux cp命令:复制文件和目录
  • 设置Oracle数据库默认为spfle启动,并且设置数据库SGA大小和PGA大小