代码随想录算法训练营第五十一天 | 买卖股票3

news2024/9/20 0:54:50

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

文档讲解:代码随想录 (programmercarl.com)

视频讲解:动态规划来决定最佳时机,这次有冷冻期!| LeetCode:309.买卖股票的最佳时机含冷冻期_哔哩哔哩_bilibili

状态:dp定义看的文档,可以根据定义写完后面的。

思路

动规五部曲

  1. 确定dp数组以及下标的含义

    dp[i][j],第i天状态为j,所剩的最多现金为dp[i][j]

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

    • 状态一:持有股票状态(今天买入股票,或者是之前就买入了股票然后没有操作,一直持有)
    • 不持有股票状态,这里就有两种卖出股票状态
      • 状态二:保持卖出股票的状态(两天前就卖出了股票,度过一天冷冻期)
      • 状态三:今天卖出股票
    • 状态四:今天为冷冻期状态,但冷冻期状态不可持续,只有一天!
  2. 确定递推公式(直接根据下面这张图可以退出)

    在这里插入图片描述

    代码

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

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

文档讲解:代码随想录 (programmercarl.com)

视频讲解:动态规划来决定最佳时机,这次含手续费!| LeetCode:714.买卖股票的最佳时机含手续费_哔哩哔哩_bilibili

状态:能直接做出来。相对于动态规划:122.买卖股票的最佳时机II (opens new window),本题只需要在计算卖出操作的时候减去手续费就可以了,代码几乎是一样的。

代码

class Solution {
public:
    int maxProfit(vector<int>& prices, int fee) {
        vector<vector<int>> dp(prices.size(), vector<int>(2, 0));
        dp[0][0] = 0 - prices[0];

        for(int i = 1; i < prices.size();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[prices.size() - 1][0], dp[prices.size() - 1][1]);
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/565788.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Microsoft Office 2019安装

哈喽&#xff0c;大家好。今天一起学习的是office2019的安装&#xff0c;有兴趣的小伙伴也可以来一起试试手。 一、测试演示参数 演示操作系统&#xff1a;Windows 10 支持Win11安装&#xff0c;不支持Win7、XP系统 系统类型&#xff1a;64位 演示版本&#xff1a;cn_office_…

【C++】——动态内存管理

目录 &#x1f31e;导读 &#x1f314;C/C内存分布 &#x1f314;C内存管理方式 &#x1f317;new/delete操作内置类型 &#x1f317;new和delete的使用方法 &#x1f314;operator new与operator delete函数 &#x1f314;new和delete的实现原理 &#x1f317;内置…

Python篇——数据结构与算法(第三部分:归并排序;快速、归并、堆排序小结;深拷贝和浅拷贝区别)

1、归并排序——归并 假设现在的列表分为两段有序&#xff0c;如何将其合成为一个有序列表这种操作称为一次归并 归并过程描述&#xff1a;&#xff08;前提是两段列表分别有序&#xff09; 两段有序列表进行对比&#xff0c;1和2进行对比选出最小的数&#xff0c;1出列&#x…

chatgpt赋能python:Python中的soup.find()方法详解

Python中的soup.find()方法详解 Python语言的简洁、易读性和快速开发的特点已经成为了程序员们的首选语言。其中&#xff0c;BeautifulSoup库作为一个非常好用的库&#xff0c;可以用于解析HTML/XML文档&#xff0c;提取出需要的信息。soup.find()方法是BeautifulSoup库中的一…

chatgpt赋能python:PythonWord目录的介绍

Python Word 目录的介绍 Python 是一种高级编程语言&#xff0c;已经成为世界上最流行的程序设计语言之一。在 Python 中&#xff0c;我们可以使用一些库和模块来完成各种任务&#xff0c;例如文本处理和文件操作。 一个很常见的文本处理任务就是生成和编辑 Microsoft Word 文…

day1 - OpenCV安装与环境配置

本期我们介绍 OpenCV 的背景知识以及如何安装 OpenCV 。 完成本期内容&#xff0c;你可以&#xff1a; 了解 OpenCV 的背景知识掌握安装 OpenCV 及其拓展库 若要运行案例代码&#xff0c;你需要有&#xff1a; 操作系统&#xff1a;Ubuntu 16 以上 或者 Windows10 工具软件…

chatgpt赋能python:PythonTables:为你的数据处理带来更高效的解决方案

Python Tables&#xff1a;为你的数据处理带来更高效的解决方案 Python是一种功能强大且易于使用的编程语言&#xff0c;可以用于各种用途。对于数据处理和分析来说&#xff0c;Python是一个非常受欢迎的选择&#xff0c;因为它有许多强大的库和工具可以使用。其中一个很有用的…

pkcs8-rfc5958

非对称密钥包摘要 本文档定义了私钥信息的语法及其内容类型。 私钥信息包括指定公钥算法的私钥和一组属性。 RFC 5652 中定义的加密消息语法 (CMS) 可用于对非对称密钥格式内容类型进行数字签名、摘要、验证或加密。 本文档废弃了 RFC 5208。 本备忘录的状态 这是一份 Internet…

多线程详解(理论与实践的最佳融合方案)

一.概述 线程简介 总而言之&#xff0c;就是在同一时间&#xff0c;做了不同的事情&#xff0c;正所谓一石二鸟&#xff0c;一箭双雕&#xff0c;赔了夫人又折兵 生活中很多事情都可以看作是多线程的例子。比如&#xff1a; 煮饭&#xff1a;煮饭需要同时加热米饭和煮菜&#…

阿里拆了中台,中台还有未来吗?

hi&#xff0c;我是熵减&#xff0c;见字如面。 近日&#xff0c;阿里在继年初3月份的16N的战略变革的基础上&#xff0c;对持续建设和运营8年的中台的调整终于落地了。 阿里对中台的这一举措&#xff0c;引发了外界对于中台战略是否还有意义的大量质疑和讨论。 甚至有人将中台…

分享一些冷门好用的网站和软件

分享一&#xff1a;UZER UZER是一个功能强大的云端应用空间&#xff0c;可以帮助您将所有的文件和应用程序都集中在一个地方&#xff0c;让您随时随地轻松访问。 以下是它的主要特点&#xff1a; 云存储&#xff1a;UZER提供大量的云存储空间&#xff0c;让您可以安全地存储…

【C++初阶】C++——模板初阶与泛型编程

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;C初阶 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 1. 泛型编程2. 函数模板…

C#,码海拾贝(23)——线性方程组求解的复系数方程组的全选主元高斯消去法之C#源代码,《C#数值计算算法编程》源代码升级改进版

using System; namespace Zhou.CSharp.Algorithm { /// <summary> /// 求解线性方程组的类 LEquations /// 原作 周长发 /// 改编 深度混淆 /// </summary> public static partial class LEquations { /// <summary&g…

MyBatis-Plus03_分页插件、自定义分页、乐观锁

目录 ①. 分页插件 ②. xml自定义分页 ③. 乐观锁 ①. 分页插件 ①. MyBatis Plus自带分页插件,只要简单的配置即可实现分页功能 ②. 添加配置类 Configuration public class MybatisPlusConfig {Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor(){MybatisPlu…

MyBatis-Plus02 条件构造器QueryWrapper、UpdateWrapper、Condition、LambdaQuery用法详解

目录 ①. 条件构造器与常用的接口 ②. QueryWrapper ③. UpdateWrapper ④. Condition——简化代码开发 ⑤. LambdaQueryWrapper ⑥. LambdaUpdateWrapper ①. 条件构造器与常用的接口 ①. Wrapper介绍&#xff1a; 条件构造器&#xff08;Wrapper&#xff09;的作用&…

【mmcv安装使用】

文章目录 一、前言二、mmcv安装1.安装方案a2.安装方案b 三、mmclassification使用1.目录说明2.数据集3.根据自己数据修改文件4.demo测试5.测试结果6.数据增强可视化7.日志分析 个人网站 一、前言 MMLab是香港中文大学深圳研究院的一个计算机视觉和深度学习研究团队&#xff0c…

chatgpt赋能python:PythonUSBHID:利用Python控制USB设备

Python USB HID: 利用Python控制USB设备 简介 USB HID&#xff08;Human Interface Device&#xff09;是一种USB设备类型&#xff0c;它允许用户与设备进行交互。许多设备&#xff0c;如键盘、鼠标、游戏控制器等&#xff0c;都使用USB HID协议进行通信。 Python是一种强大…

chatgpt赋能python:PythonUp:优秀的Python教育平台

Python Up: 优秀的Python教育平台 Python学习的重要性 随着大数据、人工智能等技术的蓬勃发展&#xff0c;Python作为一种可读性强、代码简洁、可扩展性好的编程语言&#xff0c;已经成为数据科学领域中最受欢迎的编程语言之一。因此&#xff0c;Python学习已成为现在最流行的…

Linux基础系统设置

文章目录 Linux基础系统设置网络设置(手动设置与DHCP自动获取)手动设置IP网络参数自动获取IP参数修改主机名 日期与时间设置时区的显示与设置时间的调整用ntpdate手动校时 语系设置防火墙简易设置案例 Linux基础系统设置 我们的CentOS 7 系统其实有很多需要设置&#xff0c;包…

什么是EMC?什么是EMI?什么是EMS?电磁兼容详解(一)

EMC&#xff08;Electro Magnetic Compatibility&#xff0c;电磁兼容&#xff09;是指电子、电气设备或系统在预期的电磁环境中&#xff0c;按设计要求正常工作的能力。它是电子、电气设备或系统的一种重要的技术性能&#xff0c;其包括三方面的含义&#xff1a; &#xff08…