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

文章目录

LeetCode 860. 柠檬水找零题解


问题描述

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


解题思路

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

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

代码实现(C++)
cpp 复制代码
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] 为例:

顾客 支付 操作 five ten
1 5 收下 5 美元 1 0
2 5 收下 5 美元 2 0
3 5 收下 5 美元 3 0
4 10 找零 5 美元,收下 10 美元 2 1
5 20 找零 10+5 美元 1 0

最终 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 美元)的同时实现全局最优解。关键点在于零钱面额的使用优先级边界条件的处理


相关推荐
编程的一拳超人7 分钟前
DeepSeek Harness Linux/macOS/Windows 本地下载、启动与模型配置指南
linux·windows·macos·deepseek
时凌云.13 分钟前
【2026最新】JDK 下载安装与环境配置全教程(Windows/Mac/Linux 三平台,零基础友好)
java·linux·macos
不懂的浪漫38 分钟前
ToDesk 连接 Linux 后分辨率过低的解决方法
linux·运维·数据库
203号居民1 小时前
LeetCode hot 100 — 25. K 个一组翻转链表
算法·leetcode·链表
广州灵眸科技有限公司2 小时前
从手动三步到上电即连:4G模组systemd开机自连方案
linux·运维·服务器·开发语言·网络·人工智能·php
ocean21032 小时前
2025-2026年AI算法与模型研发面试高频知识点洞察
人工智能·算法·面试
Nil2082 小时前
leetcode 78子集
数据结构·算法·leetcode
喜欢吃燃面3 小时前
深入 C++ STL:从 unordered_set与unordered_map到底层哈希表的原理与实现
数据结构·c++·散列表
susplus3 小时前
【linux应用软件编程】数据库sqlite3
linux·数据库·sqlite
GeW3 小时前
RHCE的评分潜规则:这样做实验,每题多拿20%分数
linux