2241 设计一个 ATM 机器

·   ·   ·   ·

  ·   ·


题目链接

2241. 设计一个 ATM 机器

分析

创建一个数组表示 ATM 中剩余的钞票数量,模拟实现即可

代码实现

class ATM {
private:
    static constexpr int group = 5;
    static constexpr int money_kinds[] = {20, 50, 100, 200, 500};
    int cnt[group]{};

public:
    ATM() {
  
    }
  
    void deposit(vector<int> banknotesCount) {
        for(int i = 0; i < group; ++i) {
            cnt[i] += banknotesCount[i];
        }
    }
  
    vector<int> withdraw(int amount) {
        vector<int> ans(group, 0);
        for(int i = group - 1; ~i; --i) {
            ans[i] = min(amount / money_kinds[i], cnt[i]);
            amount -= ans[i] * money_kinds[i];
        }

        if(amount != 0) {
            return {-1};
        }
  
        for(int i = 0; i < group; ++i) {
            cnt[i] -= ans[i];
        }

        return ans;
    }
};

复杂度分析

  • 时间复杂度:$O(K)$,其中 $K$ 为钞票的种类数,本题为 $5$
  • 空间复杂度:$O(K)$

:$O(K)$,其中 $K$ 为钞票的种类数,本题为 $5$