零钱贪婪算法未通过测试案例

问题描述

我正在尝试解决硬币找零问题,在这种情况下,您将使用尽可能少的硬币来赚钱。我正在尝试使用贪婪方法-我的算法对硬币数组进行排序,从最大的硬币开始,并尽可能多地使用它,然后再移动下一个将剩余部分划分的硬币。

这适用于初始测试用例:

硬币= [1,2,5],金额= 11

但这次失败了:

硬币= [186,419,83,408],金额= 6249

我不确定为什么它会失败,我仍在尝试掌握贪婪的方法。非常感谢您的反馈!

class Solution {
    public int coinChange(int[] coins,int amount) {
        int count = 0;
        
        if(coins.length == 1 && amount % coins[0] != 0) {
            return -1;
        }

        Arrays.sort(coins);
        
        int i = coins.length - 1;
        while(amount >= 0 && i >= 0) {
             if(coins[i] <= amount) {
                int remainder = amount / coins[i];
                    count = count + remainder;
                    amount -= (remainder * coins[i]);
            }
            i--;
        }
    
        return count;
    }
}

解决方法

在一般情况下(任意硬币值),贪婪地解决硬币找零问题的方法不起作用。
示例:
Coins = [2,3,6,7]Amount = 12
贪婪需要[2,7],最佳选择是[6,6]

您需要使用动态编程方法来获得最佳值。