代码随想录 -- day49 -- 121. 买卖股票的最佳时机 、122.买卖股票的最佳时机II

news/2024/7/3 17:46:48 标签: leetcode, 数据结构

121. 买卖股票的最佳时机

动态规划:

dp[i][0] 表示第i天持有股票所得最多现金,dp[i][0] 表示第i天持有股票所得最多现金。

  • 第i-1天就持有股票,那么就保持现状,所得现金就是昨天持有股票的所得现金 即:dp[i - 1][0]
  • 第i天买入股票,所得现金就是买入今天的股票后所得现金即:-prices[i]

dp[i][0] = max(dp[i - 1][0], -prices[i]);

dp[i][1] = max(dp[i - 1][1], prices[i] + dp[i - 1][0]);

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int len = prices.size();
        if (len == 0) return 0;
        vector<vector<int>> dp(len, vector<int>(2));
        dp[0][0] -= prices[0];
        dp[0][1] = 0;
        for (int i = 1; i < len; i++) {
            dp[i][0] = max(dp[i - 1][0], -prices[i]);
            dp[i][1] = max(dp[i - 1][1], prices[i] + dp[i - 1][0]);
        }
        return dp[len - 1][1];
    }
};

122.买卖股票的最佳时机II 

动态规划:

和上面的不同在于可以多次买入卖出。

dp[i][0] 表示第i天持有股票所得最多现金,dp[i][0] 表示第i天持有股票所得最多现金。

  • 第i-1天就持有股票,那么就保持现状,所得现金就是昨天持有股票的所得现金 即:dp[i - 1][0]
  • 第i天买入股票,所得现金就是买入今天的股票后所得现金即:-prices[i]

dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] - prices[i]);

dp[i][1] = max(dp[i - 1][1], prices[i] + dp[i - 1][0]);

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int len = prices.size();
        vector<vector<int>> dp(len, vector<int>(2, 0));
        dp[0][0] -= prices[0];
        dp[0][1] = 0;
        for (int i = 1; i < len; i++) {
            dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] - prices[i]); // 注意这里是和121. 买卖股票的最佳时机唯一不同的地方。
            dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] + prices[i]);
        }
        return dp[len - 1][1];
    }
};


http://www.niftyadmin.cn/n/5021225.html

相关文章

支持事务的分布式NoSQL——FoundationDB

【引子】周末阅读时光&#xff0c;一篇好的论文&#xff08;https://cacm.acm.org/magazines/2023/6/273229-foundationdb-a-distributed-key-value-store/fulltext&#xff09;&#xff0c;开阔了眼界&#xff0c;支持事务语义的NoSQL应该放到软件系统架构备选方案之中。 Foun…

策略路由典型配置:通过流策略实现策略路由(即重定向到不同的下一跳)

策略路由典型配置&#xff1a;通过流策略实现策略路由&#xff08;即重定向到不同的下一跳&#xff09; 1、拓扑图及组网要求 公司用户通过SW2核心交换机连接到外部网络&#xff0c;其中一条是高速链路&#xff0c;网关是192.168.100.2/24&#xff0c;另一条是低俗网络&#…

NotePad——格式化工具xml tools在线安装+离线安装

在使用NotePad时&#xff0c;在某些情形下&#xff0c;需要格式化Xml格式内容&#xff0c;可以使用Xml Tools插件。 一、在线安装 1. 打开Notepad 软件 2. 选择插件&#xff0c;选择“插件管理” 3. 搜索 XML Tools&#xff0c;找到该插件后&#xff0c;勾选该文件&#xff…

关于Java的类加载机制

1、概述 类会在运行期间第一次使用时&#xff0c;被类加载器动态加载至JVM。JVM不会一次性加载所有类。因为如果一次性加载&#xff0c;会占用很多的内存。 2、类的生命周期 类的生命周期包括以下 7 个阶段&#xff1a; 加载&#xff08;Loading&#xff09;验证&#xff08;…

FlinkCDC菜鸟教程/演示 MongoDB基于Flink CDC 导入 Elasticsearch

演示: MongoDB基于Flink CDC 导入 Elasticsearch 下载 docker-compose.yml version: 2.1 services:mongo: image: "mongo:4.0-xenial" command: --replSet rs0 --smallfiles --oplogSize 128 ports: - "27017:27017" environment: - MONGO…

Python中的深度学习库有哪些?

Python中的深度学习库有很多&#xff0c;以下是一些常用的库&#xff1a; TensorFlow&#xff1a;谷歌开源的深度学习库&#xff0c;支持构建和训练各种类型的神经网络模型。 Keras&#xff1a;一个高级的神经网络API&#xff0c;基于TensorFlow、Theano和CNTK&#xff0c;提供…

day 0912

#include <iostream> #include <cstring>using namespace std; class myString { private:char *str; //记录c风格的字符串int size; //记录字符串的实际长度 public://无参构造myString():size(10){str new char[size]; //构造一个长度为10的字符串strcpy(s…

《5G技术引领教育信息化新革命》

5G技术引领教育信息化新革命 随着5G技术的快速发展&#xff0c;教育领域也迎来了全新的信息化时代。5G技术为教育行业提供了更高速、更稳定、更智能的网络连接&#xff0c;使得教育信息化不再局限于传统的课堂教学&#xff0c;而是延伸到了线上、线下的全时空教育。本文将详细介…