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

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])) 
相关推荐
好学且牛逼的马14 分钟前
【Hot100|15-LeetCode 238. 除自身以外数组的乘积】
数据结构·算法·leetcode
Tisfy26 分钟前
LeetCode 3651.带传送的最小路径成本:动态规划
算法·leetcode·动态规划·题解·排序
努力学习的小廉28 分钟前
我爱学算法之—— 递归回溯综合(一)
算法·深度优先
m0_7369191028 分钟前
C++中的策略模式实战
开发语言·c++·算法
孞㐑¥29 分钟前
算法—位运算
c++·经验分享·笔记·算法
软件算法开发37 分钟前
基于卷尾猴优化的LSTM深度学习网络模型(CSA-LSTM)的一维时间序列预测算法matlab仿真
深度学习·算法·matlab·lstm·一维时间序列预测·卷尾猴优化·csa-lstm
高洁0143 分钟前
知识图谱如何在制造业实际落地应用
深度学习·算法·机器学习·数据挖掘·知识图谱
BHXDML1 小时前
数据结构:(二)逻辑之门——栈与队列
java·数据结构·算法
晚风吹长发1 小时前
初步了解Linux中的信号捕捉
linux·运维·服务器·c++·算法·进程·x信号
机器学习之心1 小时前
MATLAB基于GA-ELM与NSGA-Ⅱ算法的42CrMo表面激光熔覆参数多目标优化
算法·matlab·ga-elm