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

news2025/1/15 21:39:47

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

  • 121. 买卖股票的最佳时机
    • 解法一:动态规划
    • 解法二:贪心算法
  • 122.买卖股票的最佳时机II
    • 解法一:动态规划
    • 解法二:贪心算法


121. 买卖股票的最佳时机

教程视频:https://www.bilibili.com/video/BV1Xe4y1u77q
在这里插入图片描述

解法一:动态规划

思路:
1、dp[i][j]定义:每一天有卖出和不卖出两个状态,而这两个状态需要基于之前是否持有股票来计算,因此需要每天要记录两个状态。dp[i][j]表示第 i 天手中金额。j=0 时表示手中不持有股票,j=1时表示手中持有股票。
2、递推公式:
dp[i][0]=Math.max(dp[i-1][0], dp[i-1][1]+prices[i]-prices[i-1]);//第i天手中不持有股票,保持无票状态或者当天卖出
dp[i][1]=Math.max(dp[i-1][1], dp[i-1][0]-prices[i]);//第i天持有股票,保持有票状态或者当天买入
3、初始化dp:dp[0][0]=0;dp[0][1]=-prices[0];
4、遍历顺序:当前状态由前一个状态决定,正序遍历
5、打印验证

在这里插入代码片class Solution {
    // 时间复杂度:O(n),空间复杂度:O(n)
    public int maxProfit(int[] prices) {
        int n = prices.length;
        int[][] dp = new int[n][2];     // 创建二维数组存储状态
        dp[0][0]=0;
        dp[0][1]=0-prices[0];

        for(int i=1;i<n;i++){
            dp[i][0]=Math.max(dp[i-1][0], dp[i-1][1]+prices[i]);//第i天手中不持有股票,保持无票状态或者当天卖出
            dp[i][1]=Math.max(dp[i-1][1], 0-prices[i]);//第i天持有股票,保持有票状态或者当天买入(只能买卖一次,所以买入前手中金额一定是0)
        }
        return Math.max(dp[n-1][0],dp[n-1][1]);
    }
}

解法二:贪心算法

class Solution {
    public int maxProfit(int[] prices) {
        // 找到一个最小的购入点
        int low = Integer.MAX_VALUE;
        // res不断更新,直到数组循环完毕
        int res = 0;
        for(int i = 0; i < prices.length; i++){
            low = Math.min(prices[i], low);
            res = Math.max(prices[i] - low, res);
        }
        return res;
    }
}


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

教程视频:https://www.bilibili.com/video/BV1D24y1Q7Ls
在这里插入图片描述
在这里插入图片描述

解法一:动态规划

思路:
1、dp[i][j]定义:每一天有卖出和不卖出两个状态,而这两个状态需要基于之前是否持有股票来计算,因此需要每天要记录两个状态。dp[i][j]表示第 i 天能获得的最大利润。j=0 时表示手中不持有股票,j=1时表示手中持有股票。
2、递推公式:
dp[i][0]=Math.max(dp[i-1][0], dp[i-1][1]+prices[i]-prices[i-1]);//第i天手中不持有股票,保持无票状态或者当天卖出
dp[i][1]=Math.max(dp[i-1][1], dp[i-1][0]-prices[i]);//第i天持有股票,保持有票状态或者当天买入
3、初始化dp:dp[0][0]=0;dp[0][1]=-prices[0];
4、遍历顺序:当前状态由前一个状态决定,正序遍历
5、打印验证

class Solution {
    public int maxProfit(int[] prices) {
        int n = prices.length;
        int[][] dp = new int[n][2];     // 创建二维数组存储状态
        dp[0][0]=0;
        dp[0][1]=0-prices[0];

        for(int i=1;i<n;i++){
            dp[i][0]=Math.max(dp[i-1][0], dp[i-1][1]+prices[i]);//第i天手中不持有股票,保持无票状态或者当天卖出
            dp[i][1]=Math.max(dp[i-1][1], dp[i-1][0]-prices[i]);//第i天持有股票,保持有票状态或者当天买入
        }
        return Math.max(dp[n-1][0],dp[n-1][1]);
    }
}

解法二:贪心算法

代码随想录算法训练营day32 | 贪心算法:122.买卖股票的最佳时机II


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

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

相关文章

数据要素流通使用的安全风险分析及应对策略

数据要素流通使用的安全风险分析及应对策略 刘业政1,2, 宗兰芳1, 金斗1&#xff0c;袁昆1,2 1 合肥工业大学管理学院&#xff0c;安徽 合肥 230009 2 大数据流通与交易技术国家工程实验室&#xff0c;上海 201203 摘要&#xff1a;系统地分析了数据要素流通使用过程中存在的安全…

直播预告 | 医疗人工智能入行经验分享

&#xff08;本文阅读时间&#xff1a;2 分钟&#xff09; 或许大家从不同程度上听说或使用过智能导诊机器人、语音电子病历或是智能问诊&#xff1f;这些高端大气又便利的产物都是人工智能在医疗健康领域的重要应用场景产品及服务。 “AI医疗”是人工智能技术赋能医疗健康产业…

综述 | 基于 Transformer 网络的多模态学习

关注公众号&#xff0c;发现CV技术之美 Transformer 网络结构作为一种性能卓越的神经网络学习器&#xff0c;已经在各类机器学习问题中取得了巨大的成功。伴随着近年来多模态应用和多模态大数据的蓬勃发展&#xff0c;基于Transformer 网络的多模态学习已经成为了人工智能领域的…

chatgpt赋能Python-python_for_loop

Python For Loop: 了解循环结构控制的重要性 在Python编程中&#xff0c;循环结构控制是必备技能之一。它允许程序员重复执行指定的代码块&#xff0c;而不需要手动多次输入。Python提供了几种类型的循环结构&#xff0c;其中for循环是最常用的之一。我们将在本文中讨论for循环…

( 回溯算法) 332. 重新安排行程 ——【Leetcode每日一题】

❓332. 重新安排行程 难度&#xff1a;困难 给你一份航线列表 tickets &#xff0c;其中 tickets[i] [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。 所有这些机票都属于一个从 JFK&#xff08;肯尼迪国际机场&#xff09;出发的先生&#xf…

【泛微ecology_oracle】如何把查询到的单列人力资源id合并成多人力资源格式

如何把查询到的单列人力资源id合并成多人力资源格式 在泛微ecology中&#xff0c;单列人力资源id合并成多人力资源的使用场景在泛微ecology中&#xff0c;在数据库里人员姓名存储形式那如何实现人力资源字段合并多人力资源字段呢&#xff1f; 在泛微ecology中&#xff0c;单列人…

Node.js博客项目开发思路笔记

博客项目介绍 1. 目标 开发一个博客系统&#xff0c;具备博客基本功能只开发 server 端&#xff0c;不关心前端 2. 需求 首页、作者页、博客详情页登陆页管理中心、新建页、编辑页 3. 技术方案 数据如何存储 博客 idtitlecontentcreatetimeauthor1标题 1内容 11111112z…

Vue购物车实例练习

功能介绍 金额 单价 * 数量金额会自动根据数量的变化进行变化&#xff0c;我们可以点击按钮增加或减少商品的数量。合计金额&#xff1a;只有在序号列号勾选上才会被计入总金额中&#xff0c;金额总数会根据用户的操作自动更新数据。删除&#xff1a;如图我们勾选了第2个商品&…

【开源项目】Easy-Trans数据翻译服务的快速入门及原理解析

项目介绍 easy-trans是一款用于做数据翻译的代码辅助插件&#xff0c;利用mybatis plus/jpa/beetsql 等ORM框架的能力自动查表&#xff0c;让开发者可以快速的把id/字典码 翻译为前端需要展示的数据。 快速入门 maven依赖 <properties> <fhs.release.version>2.…

痞子衡嵌入式:MCUBootUtility v5.0发布,初步支持i.MXRT1180

--   痞子衡维护的NXP-MCUBootUtility工具距离上一个大版本(v4.0.0)发布过去4个多月了&#xff0c;期间痞子衡也做过两个小版本更新&#xff0c;但不足以单独介绍。这一次痞子衡为大家带来了全新大版本v5.0.0&#xff0c;这次更新主要是想和大家特别聊聊恩智浦新一代 i.MXRT …

一个传统剧团的自救

今天我和大家分享一个 最近我在网上看到的案例。 是这样说的 在岭南地区 有一个较为偏远的地方 当地有一个传统的戏团 他们依托当地传统习俗 把戏曲一代一代流传下来 但是到了现在。 戏团面临传承中断 戏团解散的困境。 当地文化宣传员小林 知道这个情况后。 立马展开调查 并且…

Linux——gcc/g++编译器

gcc是用来编译C语言代码的编译器&#xff0c;而g是用来编译C代码的编译器的。 而gcc和g都是软件&#xff0c;需要使用yum进行下载 注&#xff1a;需要使用root权限才能下载 在C语言编译的过程中&#xff0c;会有四个过程: 1预处理&#xff0c;2编译&#xff0c;3汇编&#xf…

CB06551 PRD-B040SSIB-63

​ CB06551 PRD-B040SSIB-63 步进电机驱动器有什么参数   步进电机驱动器基本参数如下&#xff1a; a、供电电源&#xff0c;可据所驱动步进电机的电源规格进行选择。交流电源供电的&#xff0c;如AC80V&#xff0c;可用220V市电经降压变压器&#xff0c;提供给驱动器。选用变…

YOLO-NAS 如何将 YOLO-v8 甩在身后?

在使用目标检测模型方面&#xff0c;我已经积累了一些经验。所以当我听说这个火热的新玩意儿叫做 YOLO-NAS 时&#xff0c;我知道我必须去尝试一下。让我告诉你&#xff0c;这个家伙真是让人惊叹。它就像是目标检测模型中的埃隆马斯克——大胆、创新&#xff0c;稍微有点让人害…

关于我被敲诈勒索骗了 1w 多这件事

大家好&#xff0c;我是程序员贺同学。 昨晚遭遇了人生中第一次诈骗&#xff0c;损失金额 1w多&#xff0c;趁这两天情绪缓了缓&#xff0c;把过程记录了下来&#xff0c;希望对看到的人有所帮助。 昨晚报完警回来快 23 点&#xff0c;把手机上的重要图片&#xff0c;视频&…

嵌入式 QT多界面切换

目录 1. 添加界面类实现 1.1 添加第二个界面的类 1.2 添加第2个界面的头文件和槽函数 2. 工程管理实现 在Qt中&#xff0c;多界面切换是指在一个应用程序中使用多个不同的界面&#xff0c;并在它们之间进行切换。这种切换可以是用户触发的&#xff0c;例如点击按钮或选择菜…

建议收藏,最全ChatGPT 中文调教指南:提供各个领域的角色提示词(prompts)及使用技巧,当然也有不正经指南

ChatGPT是一种基于GPT&#xff08;Generative Pre-trained Transformer&#xff09;模型的聊天机器人&#xff0c;能够回答用户提出的问题和进行对话。它是由OpenAI开发的人工智能产品&#xff0c;具有自然语言处理和深度学习技术。 ChatGPT在日常的对话中&#xff0c;表现的非…

深度剖析JVM调优法则,神器Arthas从CPU/内存出发轻松掌握调优实战技巧

场景一、CPU过高 CPU占用过高排查思路&#xff1a; step1&#xff1a;进行arthas java -jar arthas-boot.jar step2&#xff1a;输入deashboard 如何不记得命令可以在控制台输入help step3&#xff1a;查看线程栈信息 thread ID 从线程栈信息中定位到具体的java代码。 场…

Ubuntu关机、重启和注销命令

学习linux系统&#xff0c;最重要的是使用各种命令对系统进行操作&#xff0c;打开各种软件&#xff0c;本次主要分析ubuntu中的关机&#xff0c;重启&#xff0c;注销命令的使用详解。 关机命令 shutdown 1)使用shutdown --help可以查看shutdown命令如何使用&#xff0c;当然也…

mssql计划

介绍 MSSQL计划是一个用于Microsoft SQL Server数据库管理的工具。它包含了一系列的功能&#xff0c;可以帮助管理员进行数据库的备份、恢复、优化、监控等操作&#xff0c;提高数据库的性能和可靠性。 MSSQL计划的主要功能包括&#xff1a; 备份和恢复数据库&#xff1a;可以…