zoukankan      html  css  js  c++  java
  • 柠檬水找零问题

    分享简单算法:柠檬水找零

    在柠檬水摊上,每一杯柠檬水的售价为 5 美元。

    顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。

    每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。

    注意,一开始你手头没有任何零钱。

    如果你能给每位顾客正确找零,返回 true ,否则返回 false 。

    示例 1:

    语言:java

    class Solution {
        public boolean lemonadeChange(int[] bills) {
            int five = 0, ten = 0;
            for (int bill: bills) {
                if (bill == 5)
                    five++;
                else if (bill == 10) {
                    if (five == 0) return false;
                    five--;
                    ten++;
                } else {
                    if (five > 0 && ten > 0) {
                        five--;
                        ten--;
                    } else if (five >= 3) {
                        five -= 3;
                    } else {
                        return false;
                    }
                }
            }
            return true;
        }
    }
    时间复杂度为O(n),注意分情况一种一种情况,依次讨论。

    方法:模拟情景

    思路与算法

    让我们尝试模拟给每个购买柠檬水的顾客进行找零的过程。最初,我们从没有 5 美元钞票也没有 10 美元钞票的情况开始。

    • 如果顾客支付了 5 美元钞票,那么我们就得到 5 美元的钞票。

    • 如果顾客支付了 10 美元钞票,我们必须找回一张 5 美元钞票。如果我们没有 5 美元的钞票,答案就是 false,因为我们无法正确找零。

    • 如果顾客支付了 20 美元钞票,我们必须找回 15 美元。

      • 如果我们有一张 10 美元和一张 5 美元,那么我们总会更愿意这样找零,这比用三张 5 美元进行找零更有利。

      • 否则,如果我们有三张 5 美元的钞票,那么我们将这样找零。

      • 否则,我们将无法给出总面值为 15 美元的零钱,答案是 false

  • 相关阅读:
    Mysql命令非交互式执行SQL命令
    centos7离线安装rpm包自动解决依赖
    webpack
    【转】GUID学习
    Docker安装mysql
    C++的vector的使用方法
    php自动加载
    Spring MVC 入门笔记
    Java泛型
    Java输入输出
  • 原文地址:https://www.cnblogs.com/Wangjiaq/p/9418939.html
Copyright © 2011-2022 走看看