class Solution {
public:
bool lemonadeChange(vector<int>& bills) {
//手头的零钱
int dollar_5 = 0;
int dollar_10 = 0;
int dollar_20 = 0;
//每位顾客需要找的零钱
int rest;
for (int i = 0; i < bills.size(); i++){
if (bills[i] == 5){
dollar_5 += 5;
}else if (bills[i] == 10){
dollar_10 += 10;
dollar_5 -= 5;
} else {
if (dollar_10){
dollar_10 -= 10;
}else {
dollar_5 -= 10;
}
dollar_5 -= 5;
dollar_20 += 20;
}
if (dollar_5 < 0 || dollar_10 < 0){
return false;
}
}
return true;
}
};
两层维度
一:先将身高高的放前面, 如果身高相同,将k小的放前面
二:通过k直接插入到响应位置
class Solution {
public:
static bool cmp(const vector<int>& a, const vector<int>& b){
if (a[0] == b[0]){
return a[1] < b[1];
}
return a[0] > b[0];
}
vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {
sort(people.begin(), people.end(), cmp);
vector<vector<int>> que;
for (int i = 0; i < people.size(); i++){
int position = people[i][1];
que.insert(que.begin() + position, people[i]);
}
return que;
}
};
class Solution {
public:
static bool cmp (const vector<int>& L, const vector<int>& R){
return L[1] < R[1];
}
int findMinArrowShots(vector<vector<int>>& points) {
sort(points.begin(), points.end(), cmp);
int end = points[0][1];
int arrow = 1;
for (int i = 1; i < points.size(); i++){
if (points[i][0] <= end){
end = min(end, points[i][1]);
continue;
}else {
arrow++;
end = points[i][1];
}
}
return arrow;
}
};