返回

860. 柠檬水找零:破解换零硬币谜题

前端

品尝柠檬水的甜蜜,开启找零之旅

在熙熙攘攘的集市,我们支起柠檬水摊位,准备将甜蜜与清爽传递给每一位顾客。但在收银台前,我们面临着一项艰巨的挑战——找零。面对顾客递来的各种金额,我们该如何巧妙地找零,做到既快速准确,又能让顾客满意呢?

揭秘找零奥秘,踏上算法之路

为了解决找零难题,我们将借助贪心算法的智慧,踏上算法之路。贪心算法是一种在每个步骤中做出看似最好的选择,从而期望获得全局最优解的算法。在找零问题中,我们将始终优先使用较小面额的零钱找零,以最大程度地满足顾客的需求。

深入探究算法流程,步步为营

  1. 收入5元: 此时,我们将5元零钱数量加1,为下一次找零做好准备。
  2. 收入10元: 当顾客支付10元时,我们将10元零钱数量加1,并将5元零钱数量减1。这是因为5元零钱更加通用,若有10元零钱,则可以找零10元和5元,满足顾客的需求。
  3. 收入20元: 面对20元的支付,我们首先尝试用10元和10元找零。若有10元零钱,则直接找零10元和10元;若没有10元零钱,则尝试用5元和10元找零。若有5元零钱和10元零钱,则直接找零5元和10元;若没有5元零钱,则无法找零,此时交易失败。

JavaScript代码,演绎算法魅力

/**
 * 柠檬水找零
 *
 * @param {number[]} bills
 * @return {boolean}
 */
const lemonadeChange = (bills) => {
  let fiveDollarBills = 0; // 5元零钱数量
  let tenDollarBills = 0; // 10元零钱数量

  for (let i = 0; i < bills.length; i++) {
    const bill = bills[i];

    if (bill === 5) {
      fiveDollarBills++;
    } else if (bill === 10) {
      if (fiveDollarBills > 0) {
        fiveDollarBills--;
        tenDollarBills++;
      } else {
        return false;
      }
    } else if (bill === 20) {
      if (tenDollarBills > 0 && fiveDollarBills > 0) {
        tenDollarBills--;
        fiveDollarBills--;
      } else if (fiveDollarBills >= 3) {
        fiveDollarBills -= 3;
      } else {
        return false;
      }
    }
  }

  return true;
};

总结升华,掌握找零艺术

柠檬水找零题解带我们领略了算法的魅力,让我们看到了贪心算法在解决实际问题中的强大威力。通过本题,我们不仅掌握了找零的技巧,更深入理解了算法的思想和应用。在未来的编程之旅中,愿我们都能将算法的智慧融入到代码之中,创造出更多精彩的程序。