leetcode 860 柠檬水找零
一、题目描述


二、解题思路
整体思路
可以采用哈希表+模拟来解决这个问题,哈希表用于记录手中5、10面额的钱的数量,模拟这个结账的过程。
具体思路
(1)hash向量用于记录手中5、10面额的钱的数量,用于模拟哈希表,由于只需要记录两种面额钱的出现次数,所以将长度初始化为3,元素为0;
(2)遍历bills数组:
<1>如果当前的客人持有的是5美元,就执行hash[1]++;
<2>如果当前的客人持有的是10美元,如果有手上有5美元,就进行找零,continue。如果手上没有5美元,表示无法找零,返回false;
<3>如果当前的客人持有的是20美元,优先用一张10一张5进行找零,然后是3张5美元找零,如果都不能找零,就返回false;
(3)若可以将循环执行完,表示可以完成找零,返回true;
三、代码实现
class Solution {
public:bool lemonadeChange(vector<int>& bills) {//哈希表+模拟//数组模拟哈希表vector<int> hash(3,0);for(auto b:bills){if(b==5) hash[1]++;if(b==10){if(hash[1]==0) return false;else{hash[1]--;hash[2]++;}}if(b==20){//找零10和5美元if(hash[2]>=1&&hash[1]>=1){hash[2]--;hash[1]--;continue;}//找零3个5美元if(hash[1]>=3){hash[1]-=3;continue;}return false;}}return true;}
};