860.柠檬水找零
class Solution {
public:
bool lemonadeChange(vector<int>& bills) {
int five = 0;
int ten = 0;
for(int a:bills)
{
if(a==5)
{
five++;
}
else if(a==10)
{
if(five>0)
{
five--;
ten++;
}
else return false;
}
else
{
if(five>0&&ten>0)
{
five--;
ten--;
}
else if(five>=3)
{
five -= 3;
}
else return false;
}
}
return true;
}
};
//这道题的关键是确定自己身上的零钱数,即为确定five和ten的张数
406.根据身高重建队列
//这道题目有俩个维度需要去考虑,我们要一个一个去考虑
//一个维度是其身高,另一个维度是其前面大于或等于的个数
//先按从大到小,排列身高,在依次判断k值,是否符合题意,因为此时某位前面的身高都是比它高的!!!直接了一个维度
class Solution {
public:
static bool cmp(const vector<int>& a,const vector<int>& b)
{
if(a[0]==b[0]) return a[1]<b[1];//k值大的排在后面
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 {
private:
static bool cmp (const vector<int>& a, const vector<int>& b)
{
return a[0]<b[0];
}
public:
int findMinArrowShots(vector<vector<int>>& points) {
if(points.size()==0) return 0;
sort(points.begin(),points.end(),cmp);
int result = 1;//至少是一支箭
for(int i=1;i<points.size();i++)
{
if(points[i][0]>points[i-1][1])
{
result++;
}
else
{
points[i][1] = min(points[i][1],points[i-1][1]);//一箭射爆三个气球
}
}
return result;
}
};