860. 柠檬水找零
class Solution {
public:
bool lemonadeChange(vector<int>& bills) {
int bills_size = bills.size();
int five = 0, ten = 0, twenty = 0;
for(int i = 0; i < bills_size; i++) {
if (bills[i] == 5) {
five++;
} else if (bills[i] == 10) {
if (five <= 0) return false;
five--;
ten++;
} else if (bills[i] == 20) {
if (ten > 0 && five > 0) {
ten--;
five--;
} else if (five >= 3) {
five -= 3;
} else {
return false;
}
}
}
return true;
}
};
406. 根据身高重建队列
class Solution {
public:
vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {
sort(people.begin(), people.end(), [](vector<int> val1, vector<int> val2){
if (val1[0] == val2[0]) return val1[1] < val2[1];
return val1[0] > val2[0];
});
// vecotr时间复杂度高,可以用list
// vector<vector<int>> queue;
// for (int i = 0; i < people.size(); i++) {
// int position = people[i][1];
// queue.insert(queue.begin() + position, people[i]);
// }
// return queue;
std::list<vector<int>> list;
for (int i = 0; i < people.size(); i++) {
int position = people[i][1];
std::list<vector<int>>::iterator it = list.begin();
while(position--) {
it++;
}
list.insert(it, people[i]);
}
return vector<vector<int>>{list.begin(), list.end()};
}
};
452. 用最少数量的箭引爆气球
class Solution {
public:
int findMinArrowShots(vector<vector<int>>& points) {
if(points.size() == 0) return 0;
sort(points.begin(), points.end(), [](const vector<int> &l_points, const vector<int> &r_points){
return l_points[0] < r_points[0];
});
int shots = 1;
int point_size = points.size();
for (int i = 1; i < point_size; i++) {
if (points[i][0] > points[i-1][1]) {
shots++;
} else {
points[i][1] = min(points[i-1][1], points[i][1]);
}
}
return shots;
}
};