题目链接
分析
创建一个数组表示 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$