贪心算法在每一步选当前看来最有利的方案,并且不回头修改。它能成立的前提是局部最优可以扩展为全局最优;因此“看起来合理”不是证明,必须说明该选择不会排除更优答案。

区间调度是典型例子:希望选择最多个互不重叠区间,应按结束时间升序,每次选择与上一个不冲突且结束最早的区间。它给后续留下最大空间。交换论证可说明:任何最优解的第一个区间,都可替换为结束更早的选择而不减少后续数量。

跳跃类问题常维护当前能到达的最远位置。扫描到 i 时,若 i 已超过最远边界则不可达;否则更新 far=max(far,i+nums[i])。这不是枚举具体路径,而是压缩所有可达路径的信息。分配、合并和区间覆盖题也常通过排序后维护一个最有利边界解决。

排序通常占 O(n log n),排序后的单次扫描为 O(n);若输入已按需要排序,整体可降为线性。额外空间取决于排序实现和是否复制数据。

证明贪心可使用交换论证、领先性质或反证法。若无法证明,且早期选择会影响未来收益,就应考虑动态规划或搜索。误区是见到“最大、最小”便贪心、只凭样例确信策略,以及忽略相等端点是否冲突。小结:明确候选、选择标准和可行性边界,再给出局部选择安全性的理由,贪心才完整。