【LeetCode】5. 贪心算法:买卖股票时机

ops/2025/2/6 8:10:51/

太久没更了,抽空学习下。

看一道简单题。

在这里插入图片描述

class Solution:def maxProfit(self, prices: List[int]) -> int:cost = -1profit = 0for i in prices:if cost == -1:cost = icontinueprofit_ = i - costif profit_ > profit:profit = profit_if cost  > i:cost = ireturn profit

📌 解题思路:算法>贪心算法

🔹 什么是算法>贪心算法

算法>贪心算法(Greedy Algorithm 的核心思想是:

在每一步都做出当前最优的选择(局部最优),最终得到全局最优解。

在这道题中,我们的目标是在最低点买入,并在未来的某一天卖出,以获得最大利润。

局部最优解:在遍历数组 prices 时,始终记录当前的最低买入价格 cost,并尝试计算最大利润 profit。

全局最优解:整个遍历过程中,确保 profit 始终是所有可能利润中的最大值。

🔹 变量说明

cost:存储最低买入价格,初始为 prices[0](第一天的价格)。

profit:存储最大利润,初始为 0(默认没有利润)。

🔹 遍历 prices 数组的过程

更新最低买入价格 cost

cost = min(cost, i)

遍历过程中,如果发现更低的股票价格 i,就更新 cost,保证买入价始终是历史最低价。

计算并更新最大利润 profit

profit = max(profit, i - cost)

计算当前价格 i 和 cost 之间的利润。

如果利润 i - cost 比之前记录的 profit 更大,就更新 profit。

📌 复杂度分析

时间复杂度:O(n),其中 n 是 prices 的长度。

只遍历一次数组,每次操作 O(1)。

空间复杂度:O(1)。

只使用了 cost 和 profit 两个变量,没有额外的数据结构。

📌 结论:算法>贪心算法的适用性

为什么这道题可以用算法>贪心算法

题目保证只能买卖一次,所以我们只需关注最低买入价格和最大利润,不需要回溯。

每一步都在做局部最优决策(维护最小买入价,计算最大利润),最终得到了全局最优解。

由于股票价格不能回退,过去的最优选择不会影响未来的决策,所以算法>贪心算法是合适的。

⚠️ 什么时候不能用贪心?

如果题目允许多次买卖(比如 122. 买卖股票的最佳时机 II),算法>贪心算法可能不是最佳选择,因为需要考虑交易次数和冷却期等限制,此时可能需要动态规划(DP)。

📌 总结

✅ 这道题可以使用算法>贪心算法,因为每一步的局部最优(最低买入价 & 最大利润)最终导向了全局最优解。
✅ 时间复杂度 O(n),空间复杂度 O(1),是非常高效的解法。
✅ 代码逻辑清晰,适用于类似的一次交易股票买卖问题。


http://www.ppmy.cn/ops/156099.html

相关文章

将音频mp3文件添加背景音乐

你可以使用 Python 的 pydub 库来合成两个音频文件,并调整背景音乐的音量,使朗诵的声音更强。以下是实现的 Python 代码: 步骤 读取朗诵音频文件(speech.mp3)。读取背景音乐文件(background.mp3&#xff…

【CSS】什么是响应式设计?响应式设计的基本原理,怎么做

在当今多设备、多屏幕尺寸的时代,网页设计面临着前所未有的挑战。传统的固定布局已无法满足用户在不同设备上浏览网页的需求,响应式设计(Responsive Web Design)应运而生,成为网页设计的趋势和标准。本文将深入探讨响应…

【通俗易懂说模型】线性回归(附深度学习、机器学习发展史)

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀深度学习_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2. …

4 HBase 的高级 shell 管理命令

4 HBase 的高级 shell 管理命令 1.status 例如:显示服务器状态 hbase(main):058:0> status node012.whoami 显示 HBase 当前用户,例如: hbase> whoami3.list 显示当前所有的表 hbase> list4.count 统计指定表的记录数&#xff0c…

基于Javascript的封装、方法重载、构造方法

封装 封装是面向对象编程中的一个重要特性,指的是将对象的状态(属性)和行为(方法)绑定在一起,并隐藏对象的实现细节,只暴露必要的接口。JavaScript通过类(class)和对象字…

深度学习篇---深度学习中的超参数张量转换模型训练

文章目录 前言第一部分:深度学习中的超参数1. 学习率(Learning Rate)定义重要性常见设置 2. 批处理大小(Batch Size)定义重要性常见设置 3. 迭代次数(Number of Epochs)定义重要性常见设置 4. 优…

.net的一些知识点

1.public,protected,private的区别 从访问权限来说是 public>protecd>private 翻译成汉字:公有的>受保护的>私有的 但是在拿那种旧版本(2017及之前)的vs创建class的时候,这个类是没有修饰符的。现在vs2022版本创建带了默认修饰符&#x…

matlab实现了一个多视角受限核机算法,结合了多个视角的数据进行二分类任务

function [pre , score] Mv_Lap_RKM(train , test , label , gamma_list, eta , lammda , sita ) %MV_RKM 多视角 受限核机 % 解决二分类问题,label为-1或1 % eta正则项超参 % lammda隐藏层超参 %Multi-View Least Squares Support Vector Machines Classifi…