860.柠檬水找零
class Solution {
public:
int money[2];
bool lemonadeChange(vector<int>& bills) {
for(int i=0;i<bills.size();i++){
if(bills[i]==5){
money[0]++;
}else if(bills[i]==10){ //用五元找零
if(money[0]<=0) return false; //找不上来
money[0]--;
money[1]++;
}
else if(bills[i]==20){
if(money[0]&&money[1]){ //优先用10元找零
money[0]--;
money[1]--;
}
else if (money[0]>=3){ //10元不够,用5元找零
money[0]-=3;
}
else return false; //找不上来
}
}
return true;
}
};
406. 根据身高重建队列
class Solution {
public:
static int 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;
}
};
452. 用最少数量的箭引爆气球
思路:求区间的交集,由于射箭不需要横向的区间,所以只需要看一个边界即可。
class Solution {
public:
int findMinArrowShots(vector<vector<int>>& points) {
sort(points.begin(),points.end());
int res=1;
int right = points[0][1];
for(int i=1;i<points.size();i++){
if(points[i][0]>points[i-1][1])
res++;
else {
points[i][1] = min(points[i-1][1],points[i][1]);
}
}
return res;
}
};