当前位置: 首页 > news >正文

(每日一题) 力扣 860 柠檬水找零

文章目录

      • LeetCode 860. 柠檬水找零题解
        • 问题描述
        • 解题思路
          • 关键步骤:
        • 代码实现(C++)
        • 算法分析
        • 示例图解
        • 贪心策略的正确性证明
        • 边界条件与测试用例
        • 总结

在这里插入图片描述

LeetCode 860. 柠檬水找零题解


在这里插入图片描述

问题描述

在柠檬水摊上,每杯柠檬水售价 5 美元。顾客按顺序支付 5、10 或 20 美元,你需要正确找零(开始时无零钱)。若所有顾客都能成功找零,返回 true,否则返回 false


解题思路

贪心算法是本题的最优解,核心在于优先使用高面额零钱,保留灵活的小面额零钱应对后续找零需求。

关键步骤:
  1. 初始化零钱数量:用 fiveten 分别记录 5 美元和 10 美元的数量。
  2. 遍历账单
    • 收到 5 美元:直接收下,无需找零。
    • 收到 10 美元:需找 5 美元,若无则失败。
    • 收到 20 美元:优先找 10+5 美元的组合,若无则找 3 个 5 美元。若均无法满足,失败。

代码实现(C++)
class Solution {
public:
    bool lemonadeChange(vector<int>& bills) {
        int five = 0, ten = 0;
        for (auto& e : bills) {
            if (e == 5) {
                ++five;
            } else if (e == 10) {
                if (five == 0) return false;
                --five;
                ++ten;
            } else {
                // 优先用 10+5 找零
                if (five > 0 && ten > 0) {
                    --five;
                    --ten;
                } else if (five >= 3) {
                    five -= 3;
                } else {
                    return false;
                }
            }
        }
        return true;
    }
};

算法分析
  • 时间复杂度:O(n),仅需遍历一次账单数组。
  • 空间复杂度:O(1),仅用两个变量记录零钱数量。

示例图解

以输入 bills = [5,5,5,10,20] 为例:

顾客支付操作fiveten
15收下 5 美元10
25收下 5 美元20
35收下 5 美元30
410找零 5 美元,收下 10 美元21
520找零 10+5 美元10

最终 five=1, ten=0,成功找零,返回 true


贪心策略的正确性证明
  • 为何优先用 10+5 找零 20 美元?
    5 美元可应对更多场景(如找零 10 美元需 1 张,找零 20 美元需 3 张),而 10 美元只能用于找零 20 美元。优先消耗 10 美元可保留 5 美元的灵活性。

边界条件与测试用例
  1. 首顾客支付非 5 美元:直接失败(如 bills = [10])。
  2. 中途零钱不足:如 [5,5,10,10,20],最后一位顾客需找 15 美元但只剩 10 美元,失败。
  3. 大额支付需组合找零:如 [5,10,20],需正确处理 20 美元的两种找零方式。

总结

本题通过贪心策略,在保证每一步局部最优(保留最多 5 美元)的同时实现全局最优解。关键点在于零钱面额的使用优先级边界条件的处理


相关文章:

  • pyspark RDD相关常用函数使用案例
  • ubuntu20.04_vscode_snap安装方式
  • 执行NVIC_SystemReset程序不复位的解决办法
  • ca证书和服务端证书两者之间的关系
  • vue3 + xlsx 实现导入导出表格,导出动态获取表头和数据
  • 【AI】让deepseek_r1 671b输出draw.io可导入的xml图表数据
  • golang算法滑动窗口
  • 3.03-3.09 Web3 游戏周报:Sunflower Land 周留存率 74.2%,谁是本周最稳链游?
  • 数据库查问题常用OS命令汇总
  • mysql的MHA
  • 电商项目中如何选择安全高效的电商API接口?
  • 部署自己的Docker镜像加速仓库
  • Lineageos 22.1(Android 15)通知栏添加截图开关
  • 使用AI一步一步实现若依前端(4)
  • 【JAVA】之路启航——初识Java篇
  • python绘图之瀑布图
  • MySQL中有哪几种锁?
  • 个人学习编程(3-10) 刷题
  • 【C++】C++入门基础
  • SpringAI介绍及本地模型使用方法
  • 北方今年首场高温过程开启,西北华北黄淮多地最高或达40℃
  • 三件珍贵标本开箱!中国恐龙大展5月26日在沪开幕,明星标本汇聚一堂
  • 中科院合肥物质院迎来新一届领导班子:刘建国继续担任院长
  • 一女游客在稻城亚丁景区因高反去世,急救两个多小时未能恢复生命体征
  • 女排奥运冠军宋妮娜:青少年保持身心健康才能走得更远
  • 商务部召开全国离境退税工作推进会:提高退税商店覆盖面,扩大入境消费