代码随想录算法训练营第四十八天|121. 买卖股票的最佳时机、122. 买卖股票的最佳时机 II

news2024/11/30 5:39:47

LeetCode 121. 买卖股票的最佳时机
题目链接:121. 买卖股票的最佳时机 - 力扣(LeetCode)

直觉告诉我要贪心算法,章节告诉我得用DP来做,行,都做一下!

贪心:只能买一次,所以我们把最小值记下来,最大值记下来,相减(注意小的其位置要小于大的位置序号)

代码:

#python 贪心策略
class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        min_price = float('inf')  # 初始化最小价格为正无穷大
        max_profit = 0  # 初始化最大利润为0
        
        for price in prices:
            if price < min_price:
                min_price = price  # 更新最小价格
            elif price - min_price > max_profit:
                max_profit = price - min_price  # 更新最大利润
        
        return max_profit

DP的话,注意二维DP的列,当为0的时候表示为买了股票的账户最大价值,1表示为没买股票的账户最大价值,详见注释。

代码:

#python  #DP做法
class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        #假设第一天账户余额为0,该题求账户余额最大是多少
        n = len(prices)  #判断长度
        if n == 0 :   
            return 0
        dp = [[0] * 2 for _ in range(n)]   #列为0时代表拥有股票当前账户最大价值,为1代表不拥有股票最大的价值
        dp[0][0] = - prices[0]  #当把第一天的股票买了,当前账户所剩的钱
        dp[0][1] = 0  #第一天不操作账户里的钱
        for i in range(1, n):   #遍历后续情况
            dp[i][0] = max(dp[i - 1][0], - prices[i])  #列为0,表示此时拥有股票账户的最大价值,要么就是前一个状态n-1的状态,要么是当前重新在最低点买入该股票
            dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] + prices[i])  #列为1,表示此时已经卖掉股票账户所拥有的最大价值,要么是和之前卖的钱一样,要么是已经购入股票的余额加上股票卖出的最大价值
        return dp[-1][1]  #返回最大价值

LeetCode 122. 买卖股票的最佳时机 II
题目链接:122. 买卖股票的最佳时机 II - 力扣(LeetCode)

和上一题一样,两种做法都做一下;

贪心:这道题对该只股票可以重复购买,因此我们贪心做法可有如此思路:不断计算当前价格与前一天价格的差值,如果大于0(涨了)就放在股票账户上,小于0(跌了)就不计入了。

代码:

#python  #贪心策略
class Solution:
    def maxProfit(self, prices: List[int]) -> int:
         profit = 0
         for i in range(1, len(prices)):
             tmp = prices[i] - prices[i - 1]  
             if tmp > 0:    //只要有利润,就加上
                 profit += tmp
         return profit

DP:定义和上一题一样,但是注意一下中间对于每个位置上拥有股票的最大价值,就应该有一个初始状态了,也就是dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] - prices[i])。

代码:

#python  #dp做法
class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        n = len(prices)
        if n == 0 :
            return 0
        dp =[[0] * 2 for _ in range(n)]
        dp[0][0] = - prices[0]
        dp[0][1] = 0
        for i in range(1,n):
            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[-1][1]

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

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

相关文章

找不到vcomp120.dll该如何修复?vcomp120.dll丢失的5个可行解决方法

本文将对vcomp120.dll文件的丢失原因进行详细分析&#xff0c;并提供五个有效的修复方法。同时&#xff0c;本文还将深入介绍vcomp120.dll文件的作用及其在程序运行中的重要性。 一、vcomp120.dll文件丢失原因 操作系统损坏&#xff1a;由于病毒感染、系统错误等原因&#xf…

【Spring】Spring事务详解

&#x1f4eb;作者简介&#xff1a;小明java问道之路&#xff0c;2022年度博客之星全国TOP3&#xff0c;专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化&#xff0c;文章内容兼具广度、深度、大厂技术方案&#xff0c;对待技术喜欢推理加验证&#xff0c;就职于…

ChatGPT化身“AI间谍”:你在网上说的每句话都将被监控

大多数人使用 ChatGPT 就是用来聊天或者辅助学习、办公。 然而现在一些“间谍软件”公司正在探索如何使用ChatGPT和其他新兴的AI来监视社交媒体上的用户。 其中一家由俄罗斯企业家创立的Social Links的公司正使用 ChatGPT 作为助手&#xff0c;监控着用户在Facebook、Instagr…

【STM32单片机】简易计算器设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用STM32F103C8T6单片机控制器&#xff0c;使用动态数码管模块、矩阵按键、蜂鸣器模块等。 主要功能&#xff1a; 系统运行后&#xff0c;数码管默认显示0&#xff0c;输入对应的操作数进行四则运…

【好玩的 Docker 项目】搭建一个完全自由的音乐播放软件 ————Navidrome 随时随地!想听就听!

前言 随着国内版权意识的提高,现在想听一首歌曲,往往我们可能要切换 3-4 个 APP—— 网易云音乐、QQ 音乐、咪咕音乐…… 切换起来很麻烦,有的 APP 就算你买了 VIP 服务,下载的歌曲还是加密的,一旦 VIP 到期后某些歌你还听不了,非常蛋疼。 顺哥博客 最近被朋友推荐入了…

二叉树经典面试题—折纸

与其明天开始&#xff0c;不如现在行动&#xff01; 文章目录 1 折纸问题1.1 解决思路1.2 实现代码 &#x1f48e;总结 1 折纸问题 1.1 解决思路 请把一段纸条竖着放在桌子上&#xff0c;然后从纸条的下边向上方对折1次&#xff0c;压出折痕后展开。此时折痕是凹下去的&#xf…

【深入剖析K8s】容器技术基础(三):深入理解容器镜像 文件角度

容器里的进程‘看到’’的文件系统 可能你立刻就能想到,这应该是&#xff3f;个关于MountNamespace的问题:容器里的应用进程理应‘看到”一套完全独立的文件系统这样它就可以在自己的容器目录&#xff08;比如&#xff0f;tmp&#xff09;下进行操作’而完全不会受宿主机以及其…

Pycharm Available Packages显示Noting to show

使用Pycharm安装依赖包时Available packages 页面点击添加按钮后,没有任何包显示,并且无法搜索安装. 在各种网站查看到的方法如下: 1.网络问题,需要添加镜像源 点击Manage Repositories 添加一个可用的镜像源地址即可 2.打开了anaconda(那个绿色圈圈小图标),再点一下把它点…

【漏洞复现】OpenTSDB 2.4.0 命令注入(CVE-2020-35476)漏洞复现

漏洞描述 官方文档这样描述:OpenTSDB is a distributed, scalable Time Series Database (TSDB) written ontop of HBase; 翻译过来就是,基于Hbase的分布式的,可伸缩的时间序列数据库。 主要用途,就是做监控系统;譬如收集大规模集群(包括网络设备、操作系统、应用程序…

Cadence Vmanager vsif文件编写指南(持续更新...)

目录 1.NTF格式介绍 1.1.1 {属性&#xff1a;值}定义 1.1.2类别 1.1.3语法 2.vsif文件中有效的container 2.1 session {…} 1.NTF格式介绍 Cadence的Vmanager工具采用vsif类型的文件作为regression的输入文件&#xff0c;采用vplanx/csv类型的文件作为vplan的输入文件&am…

uniapp IOS从打包到上架流程(详细简单)

​ uniapp IOS从打包到上架流程&#xff08;详细简单&#xff09; 原创 1.登入苹果开发者网站&#xff0c;打开App Store Connect ​ 2.新App的创建 点击我的App可以进入App管理界面&#xff0c;在右上角点击➕新建App 即可创建新的App&#xff0c;如下图&#xff1a; ​ 3.…

数据结构——哈夫曼树结构总结

一直在找工作&#xff0c;没时间写博客&#xff0c;现在找到工作了&#xff0c;博客回归~ 哈夫曼树定义及构建教程

官网IDM下载和安装的详细步骤

目录 一、IDM是什么 二、下载安装 三、解决下载超时的问题 四、谷歌浏览器打开IDM插件 谷歌浏览器下载官网&#x1f447; 五、测试 六、资源包获取 一、IDM是什么 IDM&#xff08;internet download manager&#xff09;是一个互联网下载工具插件&#xff0c;常见于用…

NX二次开发UF_CURVE_ask_offset_curves 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_ask_offset_curves Defined in: uf_curve.h int UF_CURVE_ask_offset_curves(tag_t offset_curve_object, int * num_curves, tag_t * * offset_curves ) overview 概述 …

双周赛118(模拟、分组循环、记忆化搜索==>动态规划、单调队列优化DP)

文章目录 双周赛118[100121. 查找包含给定字符的单词](https://leetcode.cn/problems/find-words-containing-character/)模拟 [100138. 最大化网格图中正方形空洞的面积](https://leetcode.cn/problems/maximize-area-of-square-hole-in-grid/)题意转换 分组循环 [100133. 购…

鸿蒙(HarmonyOS)应用开发——基础语法例子

前言 在前面几篇文章中&#xff0c;已经介绍了ArkTs中装饰器、声明式UI、自定义组件。知识都是很零散的&#xff0c;我们可以做一个Demo。现在我们一步一步完成下面这样的页面 创建ToDo项目 输入项目的名称&#xff0c;存放的位置&#xff0c;点击完成。IDE创建项目&#xf…

MySQL基本SQL语句(下)

MySQL基本SQL语句&#xff08;下&#xff09; 一、扩展常见的数据类型 1、回顾数据表的创建语法 基本语法&#xff1a; mysql> create table 数据表名称(字段名称1 字段类型 字段约束,字段名称2 字段类型 字段约束,...primary key(主键字段 > 不能为空、必须唯一) ) …

2018年11月8日 Go生态洞察:参与2018年Go用户调查

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

共享模型之无锁

目录 无锁实现线程安全 无锁与synchronized效率对比 原子整数 原子引用类型 ABA问题 原子数组 字段更新器 原子累加器LongAdder LongAdder源码分析 Unsafe cas修改对象属性值 案例 对于银行取钱来说&#xff0c;需要保证线程安全&#xff0c;一个1w的账户由1k个线程…

GEE 22:基于GEE实现物种分布模型(更新中。。。。。。)

物种分布模型 1. 数据点准备1.1 数据加载1.2 去除指定距离内的重复点1.3 定义研究区范围1.4 选择预测因子 1. 数据点准备 1.1 数据加载 首先需要将CSV文件导入到GEE平台中&#xff0c;同样也可以导入shp格式文件。 // 1.Loading and cleaning your species data *************…