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

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]

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

好物周刊#31:在线格式转换

https://github.com/cunyu1943/JavaPark https://yuque.com/cunyu1943 村雨遥的好物周刊&#xff0c;记录每周看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;每周五发布。 一、项目 1. Soybean Admin 一个基于 Vue3、Vite3、TypeScript、NaiveUI、Pinia 和…

性能测试【二】:nmon的常用操作

性能测试【二】&#xff1a;nmon的常用操作 1、nmon介绍说明2、软件下载2.1、Nmon下载地址2.2、Nmonanalyser下载地址 3、nmon使用3.1、将nmon上传至/usr/local/src目录下&#xff0c;并解压3.2、解压后根据自己系统的实际版本查找相应的使用命令&#xff0c;并给命令赋予可执行…

Arduio开发STM32所面临的风险

据说micro_ros用到了arduino,然后用arduino搞stm32需要用到这个Arduino STM32的东西&#xff0c;然后这里申明了&#xff1a;这些代码没有经过严格测试&#xff0c;如果是向心脏起搏器&#xff0c;自动驾驶这样要求严格的的情况下&#xff0c;这个东西不能保证100%不发生问题&a…

怎样提升伦敦银买卖技巧?

如果投资者想提升伦敦银的买卖技巧&#xff0c;可以学习一些有用的技术分析方法。所谓技术分析&#xff0c;就是通过对行情过往价格和相关交易数据进行收集&#xff0c;用图表的方式解读白银市场&#xff0c;进而预测行情未来主线走势、判断价格细节变化、寻找重要支撑点阻力点…

BGP综合实验

一、实验拓扑图 二、实验需求 1、AS1存在两个环回&#xff0c;一个地址为192.168.1.0/24&#xff0c;该地址不能在任何协议中宣告&#xff0c;AS3存在两个环回&#xff0c;一个地址为192.168.2.0/24&#xff0c;该地址不能在任何协议中宣告&#xff0c;最终要求这两个环回可以…

Rust的异步编程与Futures

欢迎关注我的公众号lincyang新自媒体&#xff0c;回复关键字【程序员经典书单】&#xff0c;领取程序员的100本经典书单 大家好&#xff01;我是lincyang。 今天&#xff0c;我们来探讨Rust中的异步编程和Futures。Rust的异步编程是一个强大的特性&#xff0c;它允许开发者编写…

学习grdecl文件格式

一、初步了解 最近在学习grdecl文件格式&#xff0c;文档不多。查找资料发现&#xff0c;这个格式的文件是由斯伦贝谢公司的ECLIPSE专业软件生成的。 搜到一些文档&#xff0c;都是2010年之前的&#xff0c;似乎有些用处。文档也交代了这个文件格式分为二进制和文本格式…

卷积神经网络(CNN)车牌识别

文章目录 一、前言二、前期工作1. 设置GPU&#xff08;如果使用的是CPU可以忽略这步&#xff09;2. 导入数据3. 查看数据3.数据可视化4.标签数字化 二、构建一个tf.data.Dataset1.预处理函数2.加载数据3.配置数据 三、搭建网络模型四、设置动态学习率五、编译六、训练八、保存和…

链表?细啊!超详细的知识点总结!

链表 定义&#xff1a;链表是一种递归的数据结构&#xff0c;它或者为空&#xff08;null)&#xff0c;或者是指向一个结点&#xff08;node&#xff09;的引用&#xff0c;该结点含有一个泛型的元素和一个指向另一条链表的引用。 ​ 其实链表就是有序的列表&#xff0c;它在内…

Linux面试题(二)

目录 17、怎么使一个命令在后台运行? 18、利用 ps 怎么显示所有的进程? 怎么利用 ps 查看指定进程的信息&#xff1f; 19、哪个命令专门用来查看后台任务? 20、把后台任务调到前台执行使用什么命令?把停下的后台任务在后台执行起来用什么命令? 21、终止进程用什么命令…

C++学习之路(五)C++ 实现简单的文件管理系统命令行应用 - 示例代码拆分讲解

简单的文件管理系统示例介绍: 这个文件管理系统示例是一个简单的命令行程序&#xff0c;允许用户进行文件的创建、读取、追加内容和删除操作。这个示例涉及了一些基本的文件操作和用户交互。 功能概述&#xff1a; 创建文件 (createFile())&#xff1a; 用户可以输入文件名和内…

11【保姆级】-GO语言的struct

11【保姆级】-GO语言的struct 一、Go的面向对象1.1 说明 二、结构体2.1 结构体和结构体变量(实例)的区别和联系2.2 声明结构体 和 细节说明2.3 结构体在内存中的布局2.4 创建结构体和访问结构体的四种方式 在学习GO语言时&#xff1a; 先建立整体框架&#xff0c;然后再去抠细节…

职场快速赢得信任

俗话说的好&#xff0c;有人的地方就有江湖。 国内不管是外企、私企、国企&#xff0c;职场环境都是变换莫测。 这里主要分享下怎么在职场中快速赢取信任。 1、找到让自己全面发展的方法 要知道&#xff0c;职场中话题是与他人交流的纽带&#xff0c;为了找到共同的话题&am…

elastic -job和springboot集成实现分布式调度5

一 案例介绍说明 1.1 案例介绍 基于 Spring boot 集成方式的而产出的工程代码&#xff0c;完成对作业分片的实现&#xff0c;文件数据备份采取更接近真实项目的数 据库存取方式。 1.分片设置 2.每个线程获取给自的类型 1.2 作业配置 zk的配置 二 操作说明 2.1 数据表的初始…

【单片机学习笔记】STC8H1K08参考手册学习笔记

STC8H1K08参考手册学习笔记 STC8H系列芯片STC8H1K08开发环境串口烧录 STC8H系列芯片 STC8H 系列单片机是不需要外部晶振和外部复位的单片机&#xff0c;是以超强抗干扰/超低价/高速/低功耗为目标的 8051 单片机,在相同的工作频率下,STC8H 系列单片机比传统的 8051约快12 倍速度…

讯飞星火知识库文档问答Web API的使用(二)

上一篇提到过星火spark大模型&#xff0c;现在有更新到3.0&#xff1a; 给ChuanhuChatGPT 配上讯飞星火spark大模型V2.0&#xff08;一&#xff09; 同时又看到有知识库问答的web api&#xff0c;于是就测试了一下。 下一篇是在ChuanhuChatGPT 中单独写一个基于星火知识库的内容…

机器学习库:pandas

☁️主页 Nowl &#x1f525;专栏《机器学习实战》 《机器学习》 &#x1f4d1;君子坐而论道&#xff0c;少年起而行之 文章目录 写在开头 基本数据格式 DataFrame 数据选取 iloc 数据描述 head describe 数据合并 merge 数据删除 drop drop删除多列 处理缺失…

LeetCode Hot100 236.二叉树的最近公共祖先

题目&#xff1a; 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08;一个节…

基于U-Net的视网膜血管分割(Pytorch完整版)

基于 U-Net 的视网膜血管分割是一种应用深度学习的方法&#xff0c;特别是 U-Net 结构&#xff0c;用于从眼底图像中分割出视网膜血管。U-Net 是一种全卷积神经网络&#xff08;FCN&#xff09;&#xff0c;通常用于图像分割任务。以下是基于 U-Net 的视网膜血管分割的内容&…