力扣860. 柠檬水找零
题目来源(力扣):
https://leetcode.cn/problems/lemonade-change/description/
题目描述:
在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。
每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元(只有这3种情况)。
你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。
判断能否完成找零钱的任务。
基本思路:
贪心算法入门级难度题目,找钱时优先给大额的,之后再次大额的,最后才是小额钞票。
例如现在手上有10元1张,5元2张。
接下来需要找零10元、5元。
如果先把小额钞票2张5元凑成10元找给顾客了,则没有更多小额钞票来满足小额度找零了。
所以应该优先使用大额钞票。
代码实现:
class Solution
{
public:
bool lemonadeChange(vector<int> &bills)
{
int big = 0, mid = 0, small = 0; // 20 10 5
for (int i = 0; i < bills.size(); i++)
{
if (bills[i] == 5)
{
small++;
}
else if (bills[i] == 10)
{
mid++;
small--;
}
else
{
// big++;
if (mid)
{ // 优先使用大额钞票找零钱
mid--, small--;
}
else
small -= 3;
}
if (small < 0)
return 0;
}
return 1;
}
};
时间复杂度
O(n)
浙公网安备 33010602011771号