贪心算法解决找零钱问题

贪心算法是算法设计中的三大核心思想(贪心、动态规划、回溯)之一,核心逻辑是 "每次都做当前看起来最优的选择,最终期望得到全局最优解"。它不像回溯法那样暴力搜索所有可能,也不像动态规划那样依赖子问题的重叠性,而是通过 "局部最优决策" 快速逼近全局最优,效率通常很高(大多是 O (n) 或 O (nlogn))。

下面从 核心思想、适用条件、经典案例、与其他算法对比 四个维度,帮你彻底掌握贪心算法。

一、什么是贪心算法?

贪心算法的本质的是:不纠结于未来,只关注当下的 "最优解",并且坚信 "把每一步的局部最优拼起来,就是全局最优"。

生活中的贪心例子:
  1. 找零问题:用最少的硬币凑够指定金额(比如用 1、5、10、20 元硬币找零 37 元,最优策略是先拿 20 元,再拿 10 元,再拿 5 元,最后拿 2 个 1 元,共 4 枚硬币)------ 每次选面值最大的硬币,就是 "局部最优"。
  2. 选课问题:想选最多的课程,且课程时间不冲突 ------ 每次选 "结束时间最早" 的课程,这样剩下的时间最多,能选更多课。
  3. 背包问题(部分背包):背包容量有限,物品可分割,想装最大价值的物品 ------ 每次选 "单位重量价值最高" 的物品(比如黄金比石头单位价值高,先装黄金)。
贪心算法的核心要素:
  1. 贪心选择性质:局部最优选择能导出全局最优解(这是贪心算法成立的关键,需要证明或验证);
  2. 最优子结构:全局最优解包含子问题的最优解(和动态规划的最优子结构一致)。
贪心算法的通用步骤:
  1. 问题拆解:将原问题分解为多个子问题(每个子问题对应一步决策);
  2. 确定贪心策略:找到每一步的 "局部最优" 选择标准(比如找零选最大面值,活动选择选最早结束);
  3. 验证可行性:确认该贪心策略能导出全局最优解(这是最关键的一步,很多问题看似能用贪心,实则不行);
  4. 代码实现:按贪心策略逐步执行,累积结果。
贪心策略解决硬币找零问题步骤
  1. 将硬币按面值降序排序(优先选大面值);
  2. 遍历硬币,对当前面值,尽可能多拿(用除法计算最大可拿数量);
  3. 减去已拿硬币的总金额,更新剩余金额;
  4. 剩余金额为 0 时,返回硬币总数
java 复制代码
    public static Map<Integer, Integer> minCoins(int[] coins, int amount) {
        Arrays.sort(coins);
        Map<Integer, Integer> result = new TreeMap<>();
        for (int i = coins.length - 1; i >= 0; i--) {
            if(amount >= coins[i]) {
                result.put(coins[i], amount/coins[i]);
                amount = amount % coins[i];
            }
        }
        return result;
    }

   public static void main(String[] args) {
        int[] coins = {1, 2, 5, 10, 20, 50};
        int amount = 101;
        System.out.println("最少硬币数:" + JSONUtil.toJsonStr(minCoins(coins, amount)));
    }
相关推荐
爱尔兰极光5 小时前
LeetCode 热题 100--字母异位词分组
算法·leetcode·职场和发展
梵刹古音5 小时前
【C语言】 数组基础与地址运算
c语言·开发语言·算法
im_AMBER5 小时前
Leetcode 112 两数相加 II
笔记·学习·算法·leetcode
long3165 小时前
KMP模式搜索算法
数据库·算法
_OP_CHEN5 小时前
【算法基础篇】(五十三)隔板法指南:从 “分球入盒” 到不定方程,组合计数的万能解题模板
算法·蓝桥杯·c/c++·组合数学·隔板法·acm/icpc
近津薪荼5 小时前
优选算法——滑动窗口3(子数组)
c++·学习·算法
遨游xyz5 小时前
数据结构-栈
java·数据结构·算法
ghie90905 小时前
基于动态规划算法的混合动力汽车能量管理建模与计算
算法·汽车·动态规划
蓝海星梦5 小时前
GRPO 算法演进——裁剪机制篇
论文阅读·人工智能·深度学习·算法·自然语言处理·强化学习
小O的算法实验室5 小时前
2025年SEVC SCI2区,结合低差异序列和共轭梯度法的新型异构综合学习粒子群算法,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进