860.柠檬水找零
bool lemonadeChange(vector<int>& bills) {
int five = 0, ten = 0;
for (int bill : bills) {
if (bill == 5) {
five++;
} else if (bill == 10) {
if (five == 0) return false;
five--;
ten++;
} else { // bill == 20
if (ten > 0 && five > 0) {
ten--;
five--;
} else if (five >= 3) {
five -= 3;
} else {
return false;
}
}
}
return true;
}
406.根据身高重建队列
vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {
// 对队列进行排序,身高高的排前面,如果身高相同则前面人数少的排前面
sort(people.begin(), people.end(), [](const vector<int>& a, const vector<int>& b) {
return a[0] > b[0] || (a[0] == b[0] && a[1] < b[1]);
});
vector<vector<int>> queue;
// 根据前面的人数将每个人插入到对应的位置
for (const auto& p : people) {
queue.insert(queue.begin() + p[1], p);
}
return queue;
}
452.用最少数量的箭引爆气球
int findMinArrowShots(vector<vector<int>>& points) {
if (points.empty()) return 0;
// 按结束坐标升序排序
sort(points.begin(), points.end(), [](const vector<int>& a, const vector<int>& b) {
return a[1] < b[1];
});
int arrows = 1; // 初始箭数量为1
int end = points[0][1]; // 初始箭的位置为第一个气球的结束坐标
// 遍历气球数组
for (int i = 1; i < points.size(); ++i) {
// 当前气球的开始坐标大于箭的位置,需要增加一支箭,并更新箭的位置为当前气球的结束坐标
if (points[i][0] > end) {
++arrows;
end = points[i][1];
}
}
return arrows;
}