class Solution {
public:
bool lemonadeChange(vector<int>& bills) {
int num_5 = 0;
int num_10 = 0;
for(int i = 0; i < bills.size(); i++){
if(bills[i] == 5) num_5++;
else if(bills[i] == 10){
num_10++;
num_5--;
if(num_5 < 0) return false;
}
else{
if(num_10){
num_10--;
num_5--;
}
else{
num_5 -= 3;
}
if(num_5 < 0 || num_10 < 0) return false;
}
}
return true;
}
};
class Solution {
static bool cmp(vector<int> a, vector<int> b){
if(a[0] == b[0]) return a[1] < b[1];
return a[0] > b[0];
}
public:
vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {
sort(people.begin(), people.end(), cmp);
list<vector<int>> queue;
for(int i = 0; i < people.size(); i++){
int intIndex = people[i][1];
std::list<vector<int>>::iterator it = queue.begin();
while(intIndex--){
it++;
}
queue.insert(it, people[i]);
}
return vector<vector<int>>(queue.begin(), queue.end());
}
};
class Solution {
static bool cmp(vector<int> a, vector<int> b){
return a[0] < b[0];
}
public:
int findMinArrowShots(vector<vector<int>>& points) {
if(points.size() == 0) return 0;
sort(points.begin(), points.end(), cmp);
int res = 1;
for(int i = 1; i < points.size(); i++){
if(points[i-1][1] < points[i][0]) res++;
else{
points[i][1] = min(points[i][1], points[i-1][1]);
}
}
return res;
}
};