day 35 根据身高重建队列

文章展示了如何在C++中使用sort函数对vector进行排序,包括自定义比较函数以及使用lambda表达式。同时介绍了两个编程问题的解决方案:一个是柠檬水找零问题,涉及动态调整零钱策略;另一个是根据身高重建队列问题,需要按照特定规则对人进行排序。
摘要由CSDN通过智能技术生成

vector 的sort 怎么写

  // sort是一个全局函数,不依赖与一个具体类的实现,所以声明为静态函数
 static bool cmp(vector<int>&a, vector<int>&b){
             if(a[0] != b[0]) return a[0] > b[0];
                return a[1] < b[1];
        }
 sort(people.begin(), people.end(),cmp);


//第二种直接在sort中写
sort(people.begin(), people.end(),[&](vector<int>&a, vector<int>&b){
             if(a[0] != b[0]) return a[0] > b[0];
                return a[1] < b[1];
        });

860. 柠檬水找零

情况一:账单是5,直接收下。
情况二:账单是10,消耗一个5,增加一个10
情况三:账单是20,优先消耗一个10和一个5,如果不够,再消耗三个5

class Solution {
public:
    bool lemonadeChange(vector<int>& bills) {
        int a[3]={0, 0, 0}; // a[0] 五元  a[1] 10元  a[2] 20元
        for(int i=0; i<bills.size(); i++){
            if(bills[i] == 5){
                a[0]++;
            }else if(bills[i] == 10){
                a[1]++;
                if(a[0]>0){
                    a[0]--;
                }else return false;
            }else {
                a[2]++;
                if(a[1] > 0){
                    a[1]--;
                    if(a[0]>0){
                    a[0]--;
                    }else return false;
                }else{
                    if(a[0]>2){
                        a[0] = a[0] - 3;
                    }else return false;
                }
            }
        }
        return true;
    }
};

406. 根据身高重建队列

  1. 按照身高进行排序,身高从大到小, 身高相同 k 小的在前面
  2. 按照key进行插入
class Solution {
public:
  
    vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {
        sort(people.begin(), people.end(),[&](vector<int>&a, vector<int>&b){
             if(a[0] != b[0]) return a[0] > b[0];
                return a[1] < b[1];
        });
        vector<vector<int>>result;
        for(int i=0; i<people.size(); i++){
            result.insert(result.begin() + people[i][1], people[i]);
        }
        return result;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值