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

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])) 
相关推荐
杭州杭州杭州4 分钟前
机器学习(3)---线性算法,决策树,神经网络,支持向量机
算法·决策树·机器学习
不语n1 小时前
快速排序(Quick Sort)详解与图解
数据结构·算法·排序算法·快速排序·双指针排序
电鱼智能的电小鱼2 小时前
基于电鱼 ARM 工控机的AI视频智能分析方案:让传统监控变得更聪明
网络·arm开发·人工智能·嵌入式硬件·算法·音视频
初学者,亦行者2 小时前
Rust性能优化:内存对齐与缓存友好实战
算法·rust
py有趣2 小时前
LeetCode算法学习之杨辉三角
学习·算法·leetcode
小白菜又菜2 小时前
Leetcode 3100. Water Bottles II
算法·leetcode·职场和发展
北诺南兮2 小时前
大模型算法面试笔记——多头潜在注意力(MLA)
笔记·深度学习·算法
微知语3 小时前
悬垂引用的攻防战:Rust 如何从根源杜绝内存访问灾难
开发语言·算法·rust
万能的小裴同学3 小时前
C++ 鸭科夫手柄适配
开发语言·c++·算法