Day35| 860 柠檬水找零 406 根据身高重建队列 452 用最少数量的箭引爆气球

目录

860 柠檬水找零 

406 根据身高重建队列 

452 用最少数量的箭引爆气球 


860 柠檬水找零 

class Solution {
public:
    bool lemonadeChange(vector<int>& bills) {
        map<int, int> m;//用来记录5,10,20的数量

        //找零只是到客户给出10或20的时候才找,如果给5块我们可以直接收了
        for(int i = 0; i < bills.size(); i++){
            if(bills[i] == 5){
                m[bills[i]]++;//5元数量增加
            }else if(bills[i] == 10){
                if(m[5] == 0){//没5元了,找不了零
                    return false;
                }
                m[bills[i]]++;//10元数量增加
                m[5]--;
            }else if(bills[i] == 20){
                if(m[10] >= 1 && m[5] >= 1){
                    m[bills[i]]++;//20元数量增加
                    m[5]--;
                    m[10]--;
                }else if(m[10] == 0 && m[5] >= 3){
                    m[bills[i]]++;//20元数量增加
                    m[5]-= 3;
                }else{//不符合上面两种情况返回找不了零
                    return false;
                }
            }
        }
        return true;
    }
};

406 根据身高重建队列 

class Solution {
public:
    static bool cmp(const vector<int>& v1, const vector<int>& v2){
        if(v1[0] == v2[0]) return v1[1] < v2[1];//如果身高相等就比较k值,k值是从小到大排(升序)
        return v1[0] > v2[0];//我们要从大到小,所以返回 >
    }

    vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {
        sort(people.begin(), people.end(), cmp);//从大到小排序
        vector<vector<int>> queue;

        for(int i = 0; i < people.size(); i++){
            //得到每个数的k值,相当于这个数暂时要插入的位置。
            //后面会有值再差进去,可能会改变原本的位置,但并不会影响整体的结构
            int pos = people[i][1];
            queue.insert(queue.begin() + pos, people[i]);
        }
        return queue;
    }
};

452 用最少数量的箭引爆气球 

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) {
        int result = 1;//记录当前节点的位置;

        if(points.size() == 0) return 0;

        sort(points.begin(), points.end(), cmp);

        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、付费专栏及课程。

余额充值