""" 「贪心算法 greedy algorithm」是一种常见的解决优化问题的算法,其基本思想是在问题的每个决策阶段, 都选择当前看起来最优的选择,即贪心地做出局部最优的决策,以期获得全局最优解。 - 动态规划会根据之前阶段的所有决策来考虑当前决策,并使用过去子问题的解来构建当前子问题的解。 - 贪心算法不会考虑过去的决策,而是一路向前地进行贪心选择,不断缩小问题范围,直至问题被解决。 """ """ 使用贪心算法解决“零钱兑换问题”,给定目标金额,我们贪心地选择不大于且最接近它的硬币,不断循环该步骤,直至凑出目标金额为止。 """ """ 贪心算法不仅操作直接、实现简单,而且通常效率也很高。 然而,对于某些硬币面值组合,贪心算法并不能找到最优解。也就是说,对于零钱兑换问题,贪心算法无法保证找到全局最优解, 并且有可能找到非常差的解。它更适合用动态规划解决。 相较于动态规划,贪心算法的使用条件更加苛刻,其主要关注问题的两个性质。 - 贪心选择性质:只有当局部最优选择始终可以导致全局最优解时,贪心算法才能保证得到最优解。 - 最优子结构:原问题的最优解包含子问题的最优解。 """ def coin_change_greedy(coins: list[int], amt: int): i = len(coins) - 1 count = 0 while amt > 0: while i > 0 and coins[i] > amt: i -= 1 amt -= coins[i] count += 1 return count if amt == 0 else -1