代码随想录,第35天

本文介绍了三种编程问题的解决方案:柠檬水找零通过调整5元和10元硬币;根据身高重建队列涉及排序和插入操作;最少数量的箭引爆气球则利用了求交集的思想。
摘要由CSDN通过智能技术生成

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;
    }
};

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值