跳转至

04 - 贪心算法

1. 核心思想

贪心算法在每一步都做当前看起来最优的选择,并期望由局部最优推导全局最优。

适用前提: - 最优子结构 - 贪心选择性质(局部最优可扩展为全局最优)

2. 常见模式

  • 区间类:按右端点排序选最多不重叠区间
  • 资源分配类:按代价/收益排序
  • 覆盖类:每次扩展最远可达范围

3. 模板

Python
from typing import List, Tuple

def max_non_overlap(intervals: List[Tuple[int, int]]) -> int:
    intervals.sort(key=lambda x: x[1])
    ans = 0
    end = -10**18
    for l, r in intervals:
        if l >= end:
            ans += 1
            end = r
    return ans

4. 复杂度要求

  • 排序主导:O(n log n)
  • 线性扫描:O(n)
  • 组合后通常:O(n log n)

5. 训练清单

  • 活动选择 / 区间调度
  • 跳跃游戏 I/II
  • 分发饼干
  • 最少箭引爆气球