第一题 柠檬水找零
class Solution {
public:
bool lemonadeChange(vector<int>& bills) {
int five = 0;
int ten = 0;
for(int i = 0;i < bills.size();i++){
if(bills[i] == 5){
five++;
}
if(bills[i] == 10){
if(five > 0){
five--;
ten++;
}
else return false;
}
if(bills[i] == 20){
if(five > 0 && ten >0){
five--;
ten--;
}
else if(ten == 0 && five >=3){
five -= 3;
}
else return false;
}
}
return true;
}
};
第二题 根据身高重建队列
两点: 1.需要设置迭代器来循环到需要插入的位置,因为用的是列表所以可以降低运行时间,但是要注意迭代器是result的迭代器,因为你是需要循环到需要插入元素的列表的位置,所以it不是等于people的头部位置。这里第一次写的时候不仅没有用迭代器直接插入了,而且还写成了people的迭代器。
2.由于使用的是列表,但是该函数输出的是向量所以还要对结果进行转化。
class Solution {
public:
static bool cmp (vector<int> &a,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);
list<vector<int>> result;
for(int i = 0;i <people.size();i++){
int position = people[i][1];
auto it = result.begin();
while (position--){
it++;
}
result.insert(it,people[i]);
}
return vector<vector<int>>(result.begin(),result.end());
}
};
第三题 用最少数量的箭引爆气球
这题之前做过类似的
class Solution {
public:
static bool cmp (vector<int> &a,vector<int> &b){
if(a[0] == b[0]) return a[1] < b[1];
return a[0] < b[0];
}
int findMinArrowShots(vector<vector<int>>& points) {
sort(points.begin(),points.end(),cmp);
int count = 1;
int end = points[0][1];
for(int i = 1;i <points.size();i++){
if(end >= points[i][0]){
end = min(end,points[i][1]);
}
else{
count ++;
end = points[i][1];
}
}
return count;
}
};