第七天——贪心算法——股票买卖问题

1. 题目

给定一个整数数组 prices,其中 prices[i] 表示第 i 天的股票价格。

你可以在每一天决定买入 和/或卖出 股票。任何时候你最多只能持有一支股票 。但你可以在同一天买入并卖出 。计算并返回你能够获得的最大利润

2. 分析

思路

  • 由于可以进行 多次交易 ,我们只需要每次在股票上涨的前一天买入,上涨的当天卖出
  • 这样就能把所有上涨的部分都赚到,而不亏钱。

假设股票价格走势为 [a, b, c, d],其中:

  • 如果 a → b 是上涨的(b > a),那就赚取 b - a
  • 如果 b → c 上涨(c > b),再赚取 c - b
  • 最终总利润 = (b - a) + (c - b) + ...
    这样累加所有局部上升区间 的利润,就能得到全局最大利润

数学证明

  • 全局最优利润 = ∑(所有上升区间的涨幅)
  • 贪心策略:每次只考虑"今天比昨天贵"的情况,把所有涨价的差值加起来。

例如,prices = [1, 2, 3, 4, 5]

  • 全局最优利润:5 - 1 = 4(买在第 1 天,卖在第 5 天)
  • 贪心方法的利润
    • 2 - 1 = 1
    • 3 - 2 = 1
    • 4 - 3 = 1
    • 5 - 4 = 1
    • 总和 = 4
      两者结果一致 ,但贪心方法是每天赚取小利润 ,最终也是最大利润

3. 完整代码

复制代码
def maxProfit(prices):
    max_profit = 0
    for i in range(1, len(prices)):
        if prices[i] > prices[i-1]:
            max_profit += prices[i] - prices[i-1]
    return max_profit
print(maxProfit([7, 1, 5, 3, 6, 4])) 
相关推荐
BFT白芙堂4 分钟前
基于 GPU 并行加速的 pRRTC 算法:赋能 Franka 机械臂的高效、稳定运动规划
人工智能·深度学习·算法·机器学习·gpu·具身智能·frankaresearch3
牛老师讲GIS5 分钟前
多边形简化讲解:从四大核心算法到 Mapshaper 自动化实战
网络·算法·自动化
炽烈小老头10 分钟前
【每天学习一点算法 2026/01/08】计数质数
学习·算法
h7ml11 分钟前
企业微信通讯录同步服务的增量更新算法与冲突解决策略
服务器·算法·企业微信
2503_9469718615 分钟前
【BruteForce/Pruning】2026年度物理层暴力破解与神经网络剪枝基准索引 (Benchmark Index)
人工智能·神经网络·算法·数据集·剪枝·网络架构·系统运维
R&ain20 分钟前
C++的内联函数
c++·算法
zhmc21 分钟前
常用周期函数的傅里叶级数
人工智能·算法
漫随流水1 小时前
leetcode算法(111.二叉树的最小深度)
数据结构·算法·leetcode·二叉树
じ☆冷颜〃9 小时前
黎曼几何驱动的算法与系统设计:理论、实践与跨领域应用
笔记·python·深度学习·网络协议·算法·机器学习
数据大魔方9 小时前
【期货量化实战】日内动量策略:顺势而为的短线交易法(Python源码)
开发语言·数据库·python·mysql·算法·github·程序员创富