「算法学习」:贪心算法找零问题

找零算法,找零???
「算法学习」:贪心算法找零问题_第1张图片

「算法学习」:贪心算法找零问题_第2张图片
假设你是一个商店老板,你需要给顾客找零n元钱,你手上有的钱的面值为:100元,50元,20元,5元,1元。请问如何找零使得所需要的钱币数量最少?
例子:你需要找零126元,则所需钱币数量最少的方案为100元1找,20元1张,5元1张,1元1张。

具体思路:假设我们需要找零126元,我们先从面额大的钱比较,我们发现126比100大,除法计算可以找一张100块,然后还有26元,继续按照上面的方法去找其他面额的钱币,发现20比剩下的钱小,那再找一张20的,还剩6块,继续找一张5块的和1块的。这其实就是贪心算法的思想,每次都很贪心的去找最大的匹配那个值,然后再找次大的。

const moneyList = [100, 50, 20, 5, 1];  // 现有的面值
function changeMoney(target, allMoney) {
  const length = moneyList .length;
  const result = [];    // 存储结果的数组,每项表示对应面值的张数
  for(let i = 0; i < length; i++) {
    if(n >= moneyList [i]) {
      // 需要找的钱数比目前面额大就可以找钱,相除得出可以找几张,将张数放入数组中
      result[i] = parseInt(n / moneyList [i]);
      n = n - result[i] * moneyList [i];   // 更新剩下需要找的钱
    } else {
      // 当前面额比所需要找的钱数大则将这个数组位置置为0
      result[i] = 0;
    }
  } 
  return result;
}

const result = changeMoney(126, moneyList );
console.log(result);   // [1, 0, 1, 1, 1]

你可能感兴趣的:(算法,算法,javascript)