代码随想录Day53 | 股票买卖

算法训练day53Leetcode121. 买卖股票的最佳时机122. 买卖股票的最佳时机 II 那么第i天持有股票即dp[i][0],如果是第i天买入股票,所得现金就是昨天不持有股票的所得现金 减去 今天的股票价格 即:dp[i - 1][1] - prices[i]。中,因为股票全程只能买卖一次,所以如果买入股票,那么第i天持有股票即dp[i][0]一定就是 -prices[i]。而本题,因为一只股票可以买卖多次,所以当第i天买入股票的时候,所持有的现金可能有之前买卖过的利润。:如果前一天就不持有股票,则继续不持有的利润是。如果前一天持有股票,那么今天卖出股票的利润是。(从第二天开始计数,即。 阅读详情

121.买卖股票的最佳时机

文档讲解:代码随想录
视频讲解: 动态规划之 LeetCode:121.买卖股票的最佳时机1
状态

贪心->dp

之前使用的贪心算法,我们稍微修改

  1. dp数组
    dp[j] 表示 第j天的可以赚得的最大金额
  2. 递推公式
    如果第j天金额比记录的最小值小那么就为0,并且更新最小值
    如果第j天金额比记录的最小值大,那么就比较dp[j-1]和prices[j]-minval的大小存储最大值。
  3. 初始化
    初始全为0,最小值记录为第一个数
  4. 遍历顺序
    从前向后
  5. 打印dp
class Solution {
public:
    int maxProfit(vector<int>& prices) {
        //记录最小值
        int minval = prices[0];
        vector<int> dp(prices.size(),0);
        for(int i = 1;i<prices.size();i++)
        {
            if(prices[i] <= minval)
            {
                dp[i] = dp[i-1];
                minval = prices[i];
            }
            else
            {
                dp[i] = max(dp[i-1],prices[i]-minval);
            }
        }
        return dp[prices.size()-1];
    }
};

动态规划

二维dp数组

  1. dp数组
    dp[j][0] 表示第i天持有股票时的最大金额
    dp[j][1] 表示第i天不持有股票时的最大金额

  2. 递推公式
    首先对于dp[j][0],由于只会购买一次,所以如果前一天持有股票那么dp[j][0] = dp[j-1][0]。如果前一天没有持有股票,则第j天购入,那么dp[j][0] = -prices[j]

    其次对于dp[j][1],如果第j-1天不持有股票那么dp[j][1] = dp[j-1][1]。如果第j天卖出股票那么dp[j][1] = dp[j-1][0]+prices[j]

  3. 初始化
    dp[0][0] = -prices[0] dp[0][1] = 0

  4. 遍历顺序
    从前往后

  5. 打印dp

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

        for(int i = 1;i<prices.size();i++)
        {
            dp[i][0] = max(dp[i-1][0],-1*prices[i]);
            dp[i][1] = max(dp[i-1][1],dp[i-1][0]+prices[i]);
        }
        return dp[prices.size()-1][1];
    }
};

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

文档讲解:代码随想录
视频讲解:
状态

这道题最大的区别就是可以购买多次,但在持有期间不能购买,所以对于解题实际上是递推公式发生了变化
二维dp数组

  1. dp数组
    dp[j][0] 表示第i天持有股票时的最大金额
    dp[j][1] 表示第i天不持有股票时的最大金额

  2. 递推公式
    首先对于dp[j][0],由于只会购买一次,所以如果前一天持有股票那么dp[j][0] = dp[j-1][0]。如果前一天没有持有股票,由于前面已经卖出有金额或者为0则第j天购入,那么dp[j][0] = dp[j-1][1]-prices[j]

    其次对于dp[j][1],如果第j-1天不持有股票那么dp[j][1] = dp[j-1][1]。如果第j天卖出股票那么dp[j][1] = dp[j-1][0]+prices[j]

  3. 初始化
    dp[0][0] = -prices[0] dp[0][1] = 0

  4. 遍历顺序
    从前往后

  5. 打印dp

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        if(prices.size() == 0) return 0;
        vector<vector<int>> dp(prices.size(),vector<int>(2));
        dp[0][0] = 0 - prices[0];
        dp[0][1] = 0;
        for(int i = 1;i<prices.size();i++)
        {
            //对于第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]);
        }
        return dp[prices.size()-1][1];
    }
};

这两道题都是dp[j][1]的返回结果,因为最大金额一定是要抛出手中股票才会得到

概率论 知识图谱 + 实战案例解析 本文通过构建概率论知识图谱,系统梳理了从随机试验、概率、条件概率到随机变量与分布的核心概念及其内在联系。结合朴素贝叶斯分类器和蒙特卡洛模拟等实战案例,深入解析了条件概率、独立性及大数定律等理论如何应用于机器学习与实际问题求解,旨在帮助读者建立结构化思维,将理论有效转化为解决实际问题的能力。 阅读详情

相关推荐

PlutoSDR驱动安装避坑指南:从设备管理器异常到MATLAB 2023b完美识别

本文是一份详细的PlutoSDR驱动安装与MATLAB 2023b集成排错指南。针对Windows系统下常见的设备管理器异常、驱动兼容性问题,提供了从旧驱动清理、手动指定驱动文件到USB连接稳定性排查的完整解决方案。重点阐述了如何通过离线安装硬件支持包,并利用MATLAB命令进行连接测试与射频信号验证,最终实现设备的完美识别与稳定调用。

weixin_29159441的博客 428

代码随想录Day54 | 股票买卖

Day53

sRiddle的博客 607

单细胞转录组分析(scRNA-seq)

单细胞转录组测序(Single-cell RNA sequencing,scRNA-seq)是一种高通量测序技术,可以在单细胞水平解析基因表达情况,揭示细胞异质性,探索稀有细胞类型,并研究细胞状态转换及动态调控机制。与传统的。

大甘的博客 6148

代码随想录 | Day53

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档。

优快云_0853的博客 285

ESP32 CAM安装配置 第四部份:通过使用ESPHome的方式ESP32 Cam加到HomeAssistant

这些包括 aec_value, aec2, ae_level, agc_gain, gain_ctrl, bpc, wpc, raw_gma, lenc, hmirror, dcw, colorbar 等。这些参数的可能值和具体效果会根据你的摄像头硬件和 ESPHome 的版本有所不同。在 ESPHome 中配置 ESP32 Cam 时,每个参数的可能值取决于具体的功能和支持范围。值的范围是 0 到 63,其中 0 是最差质量,63 是最佳质量。horizontal: 水平校正的强度,通常是一个数字值。

weixin_42895252的博客 3364

北斗导航 | raPPPid软件功能模块详解

raPPPid(Rapid Precise Point Positioning with integer ambiguity resolution,快速精密单点定位与整周模糊度解算)是由维也纳工业大学(TU Wien)大地测量与地理信息系开发的MATLAB开源PPP软件包。它是VieVS(Vienna VLBI and Satellite Software,维也纳VLBI与卫星软件)的PPP模块,由Marcus Franz Glaner和Robert Weber主导开发。

尘世冰封的专栏 585

代码随想录系统性一刷总结

指针思想很重要day01 二分查找+移除元素day02 数组平方+长度最小子数组+螺旋矩阵II。

qq_44072579的博客 1048

【WRFDA实操第一期】服务器中安装 WRFPLUS 和 WRFDA

【WRFDA实操第一期】安装 WRFPLUS 和 WRFDA

WW、forever的博客 2037

训练营打卡Day53

训练营打卡Day53

hhk166的专栏 126

【光子AI / Photon.AI】manus 通用 Agent 的实现核心技术原理与应用

摘要 Manus是一款由国内团队开发的通用AI Agent,其核心技术原理基于多智能体协作架构、云端全能沙箱、规划-执行-反思循环等系统工程方法。与传统的对话式AI不同,Manus能够在独立的Linux虚拟机环境中自主规划并执行复杂任务,通过编写和运行代码来解决问题,具备强大的纠错能力和工具使用能力。 核心应用场景包括深度行业研究、自动化办公、生活助理、辅助编程和跨平台信息整合等。Manus的工程化落地优势体现在沙箱环境、多智能体调度和容错机制等方面,使其能够完成需要多步骤操作和多种工具调用的复杂任务,将A

AI天才研究院 666

第一节:Vben Admin介绍和初次运行

本文是【实战Vben Admin + Python】的第一节,本文内容主要是介绍Vben Admin框架和我们后端使用的技术,开发环境和工具的准备本节文章的目的是Vben Admin的简单介绍,通过配置可以让项目前端运行起来,由于项目默认开启了mock,展示的都是静态模拟数据,我们在此基础上,下一节将研究分析下Vben Admin的目录。为我们后端搭建准备。

cuiwin的专栏 7411

代码随想录训练营Day 53|力扣309.最佳买卖股票时机含冷冻期 、714.买卖股票的最佳时机含手续费、总结

dp[i][0] 第i天持有股票的最大利润;dp[i][1] 第i天保持卖出股票的最大利润;dp[i][2] 第i天当天卖出股票的最大利润;// 持有股票:前一天就持有了 或 前一天已经过了冷冻期,今天买入股票 或 前一天就是冷冻期,今天买入股票。这几道买卖股票的题都是把第0天买入股票的情况初始化为-prices[0]这几道买卖股票的题都是把第0天买入股票的情况初始化为-prices[0]// 不持有股票: 前一天不持有 或 前一天持有,当天卖出(含手续费)dp[i][0] 第i天持有股票的最大利润;

weixin_64434454的博客 1024

【异常检测】新版异常检测库anomalib的使用

异常检测库anomalib的使用。

胡侃有料的博客 4390

代码随想录Day54

代码随想录Day54,继续学习动规解决最佳股票买卖时机系列问题,开始发现确定状态和状态转移的重要性!

qq_57596472的博客 189

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

代码随想录算法训练营29期|day53 任务以及具体安排

思路:该题可以使用贪心、暴力、动态规划解决,本解法使用动态规划,确定dp数组为二维数组,代表第i天持有和不持有股票的最大金额,确定递推公式,确定持有股票的递推公式和不持有股票的递推公式。思路:于上一题的区别就是本题可以多次买卖股票,dp数组、遍历顺序都一样,就是持有股票的递推公式发生了变化,当天i买股票的钱为前一天不持有股票的最大金额减去买股票的钱。122.买卖股票的最佳时机II。121. 买卖股票的最佳时机。第九章 动态规划part10。

m0_68520551的博客 278

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

算法训练营day53

这道题就是在 买卖股票Ⅱ上多了一个手续费而已。

stmfresher的博客 310

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【Day53】代码随想录之动态规划part10——买卖股票的最佳时机、买卖股票的最佳时机II

i仅仅表示卖出的这种状态,不一定是当天去买或者卖股票dp[i][0]表示持有这支股票,所得到的最大现金;dp[i][1]表示不持有这支股票,所得到的最大现金。注意:dp[i][0]不一定是当天有这支股票,有可能是0 ~ i-1天之间买入的;dp[i][1]也是同理。最终要求的结果 max(dp[price.size()-1][0] , dp[price.size()-1][1])

格子格鸽的个人博客 988

代码随想录算法训练营day 53 |123.买卖股票的最佳时机III、188.买卖股票的最佳时机IV

代码随想录算法训练day 53

wuhuqifei123的博客 344

day53--动态规划12

309.最佳买卖股票时机含冷冻期714.买卖股票的最佳时机含手续费第一题:.最佳买卖股票时机含冷冻期给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格。设计一个算法计算出最大利润。相比之前的股票问题,多了一个情况,卖出股票后无法在第二天买入股票,也就是说卖出后必须等待1天才能对股票进行操作。动态规划五部曲:(1)确定dp数组以及下标的含义dp[i][j],第i天的状态为j,所剩的最多现金为dp[i][j]几个状态:状态一:持有股票(不管是今天买入,或者昨天买入,但手上有股票)

orange121212的博客 137

股票买卖问题,

Best Time to Buy and Sell Stock III Description: Say you have an array for which the ith element is the price of a given stock on day i. Design an algorithm to find the maximum profit. You may comple...

Superbeans的博客 614

算法刷题 DAY53

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

m0_66371400的博客 493

代码随想录算法训练营day53 || 121.买卖股票的最佳时机,122.买卖股票的最佳时机||

思路:二维dp在递推公式上与 买卖股票的最佳时机I 有这不同,是dp[i-1][0]-prices[i]替代-prices[i]这个过程, 其实本质就是-prices[i]表示的dp[i-1][0]总是零,即模拟出了总是第一次买入,而没有其他买入所带来的收益。而去两题针对dp[i][1]取max都是喜欢买的价格尽可能的小或者减少利润的消耗。思路:寻找全局最大间隔,对于不满足后大前小的地方,直接继承前一位置的状态。

旭 486

算法刷题day51:状态机模型

关于这个状态机模型,其实感觉是动态规划中比较简单的一种了,只要把问题中的各个状态找出来,并且分析出这些状态之间的关系和代价,其实代码就是照着这个关系图抄而已,就是这么的简单。所以主要在于分析,这是最重要的,分析也不是你自己一个人想出来的,也是要通过训练你在这方面的能力才行,不可能你什么都没学就能凭空想出来一个东西,那么你刚出生话都不会说字也不认识,能想的到吗,所以还是一个记忆的过程,可以说是一个训练思维的过程,你能想出来说明你之前做过这种题,你记住了这种思维,所以你能做出来,所以开始训练吧。

weixin_60033897的博客 1058

代码随想录算法训练营Day53|LeetCode121买卖股票的最佳时机、LeetCode122买卖股票的最佳时机II(补卡)

LeetCode122买卖股票的最佳时机II。LeetCode121买卖股票的最佳时机。

m0_66412823的博客 384

代码随想录算法训练营53期 DAY28 | 122.买卖股票的最佳时机II,55. 跳跃游戏,45.跳跃游戏II,1005.K次取反后最大化的数组和

代码随想录PDF,代码随想录网站,代码随想录百度网盘,代码随想录知识星球,代码随想录八股文PDF,代码随想录刷题路线,代码随想录知识星球八股文。代码随想录PDF,代码随想录网站,代码随想录百度网盘,代码随想录知识星球,代码随想录八股文PDF,代码随想录刷题路线,代码随想录知识星球八股文。代码随想录PDF,代码随想录网站,代码随想录百度网盘,代码随想录知识星球,代码随想录八股文PDF,代码随想录刷题路线,代码随想录知识星球八股文。贪心的思路,局部最优:当前可移动距离尽可能多走,如果还没到终点,步数再加一。

2201_75491039的博客 132

day53 动态规划part10(121. 买卖股票的最佳时机 122. 买卖股票的最佳时机 II)

简单给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0。

weixin_43889767的博客 708
上一篇: 代码随想录Day52 | 打家劫舍
下一篇: 代码随想录Day54 | 股票买卖
sRiddle
博客等级 码龄7年 528粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值