文档讲解:代码随想录 (programmercarl.com)
视频讲解:代码随想录的个人空间-代码随想录个人主页-哔哩哔哩视频 (bilibili.com)
LeetCode 860.柠檬水找零
题目链接:860. 柠檬水找零 - 力扣(LeetCode)
代码如下:
class Solution {
public:
bool lemonadeChange(vector<int>& bills) {
int five=0;
int ten=0;
for(auto bill:bills){
if(bill==5){
five++;
}else if(bill==10){
ten++;
five--;
}else{
if(ten>0)ten--;else five-=2;
five--;
}
if(five<0||ten<0)return false;
}
return true;
}
};
LeetCode 406.根据身高重建队列
题目链接:406. 根据身高重建队列 - 力扣(LeetCode)
代码如下:
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>> res;
for(int i=0;i<people.size();i++){
res.insert(res.begin()+people[i][1],people[i]);
}
return res;
}
};
LeetCode 452. 用最少数量的箭引爆气球
题目链接:452. 用最少数量的箭引爆气球 - 力扣(LeetCode)
解题代码如下:
class Solution {
public:
static bool cmp(const vector<int>&a,const vector<int>&b){
return a[0]<b[0];
}
int findMinArrowShots(vector<vector<int>>& points) {
sort(points.begin(),points.end(),cmp);
int res=1;
// int min_value=points[0][1];
if(points.size()==1)return 1;
for(int i=1;i<points.size();i++){
// if(points[i][0]>min_value)res++;
// else if(min_value>points[i][1])min_value=points[i][1];
// 上述两行的代码错误在于min_value保存的是全局变量,而真正需要记录的只有前一个和当前的量。
if(points[i-1][1]<points[i][0])res++;
else points[i][1]=min(points[i-1][1],points[i][1]);
}
return res;
}
};