假设你有一个随机的队列列表。 每个人用一对整数(h,k)来描述,其中h是人的身高,k是身高大于或等于h的人前面的人数。 编写一个算法来重建队列。
2017-12-11 11:09
429 查看
本题源自leetcode 406
----------------------------------------------------------------------------
思路:1 先按身高排序,如果身高相等再按第二个参数排序。
2 根据顺序遍历数组,按第二个元素的值插入结果数组、。
代码:
vector<pair<int, int>> reconstructQueue(vector<pair<int, int>>& people) {
auto comp = [](const pair<int,int>& p1, const pair<int,int>& p2){ //lamba表达式
return (p1.first > p2.first ||(p1.first == p2.first && p1.second < p2.second));
};
vector<pair<int,int>> res;
sort(people.begin(),people.end(),comp);
for(auto& p : people){
res.insert(r
4000
es.begin() + p.second, p);
}
return res;
}
----------------------------------------------------------------------------
思路:1 先按身高排序,如果身高相等再按第二个参数排序。
2 根据顺序遍历数组,按第二个元素的值插入结果数组、。
代码:
vector<pair<int, int>> reconstructQueue(vector<pair<int, int>>& people) {
auto comp = [](const pair<int,int>& p1, const pair<int,int>& p2){ //lamba表达式
return (p1.first > p2.first ||(p1.first == p2.first && p1.second < p2.second));
};
vector<pair<int,int>> res;
sort(people.begin(),people.end(),comp);
for(auto& p : people){
res.insert(r
4000
es.begin() + p.second, p);
}
return res;
}
struct comp{ //函数子对象 bool operator()(const pair<int,int>& p1, const pair<int,int>& p2){ return (p1.first > p2.first ||(p1.first == p2.first && p1.second < p2.second)); } }; vector<pair<int, int>> reconstructQueue(vector<pair<int, int>>& people) { /* auto comp = [](const pair<int,int>& p1, const pair<int,int>& p2){ return (p1.first > p2.first ||(p1.first == p2.first && p1.second < p2.second)); }; */ vector<pair<int,int>> res; sort(people.begin(),people.end(),comp()); for(auto& p : people){ res.insert(res.begin() + p.second, p); } return res; }
相关文章推荐
- 编写程序,生成一个包含20个随机整数的列表,然后对其中偶数下标的元素进行降序排列,基数下标的元素不变
- 请编写一个Java程序,接收一个大于等于2的整数,实现下面功能。
- 假设有两个包含整数的vector对象,编写一段程序,检验其中一个vector对象是否是另一个的前缀。
- 一个无序整数数组,数组元素大于5个,请用一种高效的算法找出其中最大的5个值.
- 描述一个运行时间为O(nlgn)的算法,使之能在给定一个由n个整数构成的集合S和另一个整数 X 时,判断出S中是否存在有两个其和刚好等于 X 的元素。
- 假设以带头结点的循环链表表示队列, 并且只设一个指针指向队尾元素结点(注意不设头指针) 试编写相应的队列初始化,入队列和出队列的算法
- 编写一个程序,读入个数不确定的(<=100个)考试分数,并且判断有多少个分数是大于或等于平均分,多少个分数是低于平均分的。输入一个负数表示输入的结束。假设成绩的最高分为10分。
- 编写设计一个People(人)类。该类的数据成员有年龄(age)、身高(height)、体重(weight)和人数(num),其中人数为静态数据成员
- 编写设计一个People(人)类。该类的数据成员有年龄(age)、身高(height)、体重(weight)和人数(num),其中人数为静态数据成员,成员函数有构造函数(People)、进食(Eatt
- 创建一个包含15个随机整数(0~9)的列表,然后去掉其中的所有重复数字。
- 20100127_1 设一维数组V中存有N个整数,试写一个算法,将其中的非零元素移到数组的前面来,连续存放,相对位置不变。
- 编写猜字游戏,随机产生一个1-1000的整数,玩家任意输入一个数字,计算器回答大于该数或者小于该数,直至猜中。(显示玩家猜的次数)
- 编写设计一个People(人)类。该类的数据成员有年龄(age)、身高(height)、体重(weight)和人数(num),其中人数为静态数据成员,成员函数有构造函数(People)、进食(Eatt
- 给定一个有序整数数组,元素各不相同且按照升序排列,编写一个算法,创建一个高度最小的二叉查找树
- javascript小实例,编写一个方法,实现从n-m个数中随机选出一个整数
- 请编程实现:产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复(百度了一下,get一种高性能算法,非递归)
- 如何用Java编写从命令行输入一个整数N,当N小于或等于5则求1+2+3+
- 基础算法测试——生成一个1-10之间的随机整数组合
- 编写一个类,其中包含一个排序的方法Sort(),当传入的是一串整数,就按照从小到大的顺序输出,如果传入的是一个字符串,就将字符串反序输出。
- 陈利人 面试题 对于一个n位正整数a,去掉其中任意k(k<=n)个数字后,剩下的数字按原次序排列可以组成一个新的正整数。设计一个删数算法,使得剩下的数字组成的正整数最小。