当前位置: 首页 > news >正文

LeetCode-贪心-买卖股票的最佳时机

image-20250520203051704

LeetCode-贪心-买卖股票的最佳时机

✏️ 关于专栏:专栏用于记录 prepare for the coding test


文章目录

  • LeetCode-贪心-买卖股票的最佳时机
    • 📝买卖股票的最佳时机
      • 🎯题目描述
      • 🔍 输入输出示例
      • 🧩题目提示
      • 🧪AC
    • 🚀 拓展思考
    • 🌟 总结

📝买卖股票的最佳时机

🎯题目描述

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。

你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。

返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0

🔗题目链接:买卖股票的最佳时机

🔍 输入输出示例

示例 1:

输入:[7,1,5,3,6,4]
输出:5
解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。

示例 2:

输入:prices = [7,6,4,3,1]
输出:0
解释:在这种情况下, 没有交易完成, 所以最大利润为 0。

🧩题目提示

  • 1 <= prices.length <= 105
  • 0 <= prices[i] <= 104

🧪AC

  • 贪心算法:该题的核心在于实时维护最低买入价格 min_price,同时在遍历中计算当前价格卖出可获得的利润 p - min_price,不断更新最大利润 ans
  • 为什么贪心有效?
    • 买入时机只能往前找最低价格,卖出时机往后找最高价格,利润最大。
    • 只要保证每次计算的卖出价格比之前记录的最低买入价格高,就可以更新最大利润。
    • 不需要回溯或动态规划,时间复杂度是 O(n),空间复杂度 O(1)。
  • 边界条件
    • 当股票价格一直下降时,利润为0,即不进行交易。

本题的核心在于找到买入价格的最低点和随后卖出的最高点,确保买卖时序正确。

关键点分析:

  1. 必须保证卖出时间在买入时间之后。因此不能简单地用最大价格减最小价格。
  2. 用贪心算法解决: 在遍历过程中维护当前遇到的最低买入价格 min_price,并在每一天计算当前卖出价格 pmin_price 的差值,更新最大利润。
  3. 算法的正确性基于贪心选择性质
    • 每天的最低价格都是潜在的买入点,及时更新;
    • 利润最大时的卖出点是当前价格减去历史最低买入价。
class Solution {
public:int maxProfit(vector<int>& prices) {int ans = 0;int min_price = prices[0];for(int p : prices){ans = max(ans,p - min_price);min_price = min(min_price,p);}return ans;}
};

min_price:用于跟踪迄今为止遇到的最低股票价格,即最优买入点。

max_profit:用于记录遍历过程中的最大收益。

每次遍历:

  • 遇到更低价时更新买入点;
  • 否则尝试计算卖出利润,并更新最大利润。

最终返回最大利润。

🚀 拓展思考

  1. 多次交易场景
    • 如果允许多次买卖,如何设计算法?
      • 答:可以贪心累加每一次上涨区间的差值,参考“买卖股票的最佳时机 II”。
  2. 交易费用与冷冻期
    • 若每次交易需要付手续费,或卖出后有冷冻期,问题将变得复杂。
    • 此时可用动态规划方法,记录状态转移。
  3. 买卖股票含限价单
    • 限价单等交易策略可引入不同的约束和优化问题。
  4. 具体买卖日期
    • 本题只求最大利润,若需要具体买卖日期,只需在遍历时记录买入和卖出时的索引。

🌟 总结

  • 该题是经典的贪心问题,核心思想是实时维护最低买入价,计算最大卖出利润
  • 代码简洁,效率高,适合入门贪心算法题。
  • 理解该题,有助于掌握更复杂的股票买卖变种问题。

❤️ 如果对你有帮助,别忘了点赞、收藏支持一下,我将持续更新更多高质量刷题笔记!
📘 点击查看 👉 算法笔记专栏:Prepare for the Coding Test

相关文章:

  • SOC-ESP32S3部分:11-任务创建
  • 基于亚博K210开发板——lvgl 图形化实验
  • ubuntu ollama /Dify/Docker部署大模型
  • 刷题 | 牛客 - js中等题-下(更ing)30/54知识点解答
  • 多态的总结
  • 【C语言】习题练手套餐 2
  • 在WPF程序中设置背景图片
  • 深度解析NL2SQL:从语义理解到工程实践的全链路探索
  • 向量数据库Milvus03-高级功能与性能调优
  • 探索产品经理的MVP:从概念到实践
  • AVL树简介与部分实现
  • 基于pycharm,python,flask,sklearn,orm,mysql,在线深度学习sql语句检测系统
  • Microsoft.ClearScript.V8单例模式封装,方便下次使用。
  • web常见的攻击方式有哪些?如何防御?
  • JVM学习(四)--对象内存布局
  • Vue3性能优化: 大规模列表渲染解决方案
  • CUDA 性能优化 | 共享内存机制 / 向量化访存策略
  • 一个开源的 Blazor 跨平台入门级实战项目
  • Baklib内容中台的主要构成是什么?
  • vscode | Trae【实用插件】Remove empty lines 保存文件时删除空行
  • 国家建设部网站2018年/seo前景
  • 英文网站建设维护/网址大全导航
  • 不会技术怎么做公司网站/店面怎么做位置定位
  • 太原网站建设世纪优创/自己想开个网站怎么弄
  • 兖州市做网站/seo是什么意思网络用语
  • 网站必须备案/查询域名网站