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

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])) 
相关推荐
QiLinkOS8 小时前
第三视觉理解徐玉生与他的商业活动(30)
大数据·c++·人工智能·算法·开源协议
疯狂打码的少年8 小时前
【操作系统】页面置换算法(OPT/FIFO/LRU)
算法
小O的算法实验室9 小时前
2026年CIE,优化客货协同运输:综合地铁系统的列车容量动态分配
算法
Coder_Shenshen10 小时前
西门子S7CommPlus协议鉴权算法原理与流程详解
网络·后端·算法
硕风和炜10 小时前
【LeetCode: 2492. 两个城市间路径的最小分数 + DFS】
java·算法·leetcode·深度优先·dfs·bfs·并查集
我是一颗柠檬11 小时前
【Java项目技术亮点】加权轮询负载均衡算法
java·算法·负载均衡
灯厂码农11 小时前
C语言动态内存分配完全指南(malloc、calloc、realloc、free)
java·c语言·算法
凯瑟琳.奥古斯特13 小时前
K次取反最大化数组和解法(力扣1005)
开发语言·c++·算法·leetcode·职场和发展
Jerry13 小时前
LeetCode 203. 移除链表元素
算法
地平线开发者13 小时前
征程 6 | 工具链 QAT ObserverBase 源码解析
算法