题目描述
知识点
贪心
结果
实现
码前思考
- 看到这种带数字的比较大小题目,毫无疑问要想到排序~
- 根据题目的特征,从大到小排序是最好的~
- 需要使用一下
vector
的insert()
函数,注意这个函数只能传迭代器,不能传数组下标。。。好像
代码实现
struct person{
int h;
int k;
};
class Solution {
public:
static bool cmp(person a,person b){
return a.h != b.h ? a.h>b.h : a.k<b.k;
}
vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {
vector<person> res;
vector<person> input;
int size = people.size();
for(int i=0;i<size;i++){
person tmp;
tmp.h = people[i][0];
tmp.k = people[i][1];
input.push_back(tmp);
}
//排序
sort(input.begin(),input.end(),cmp);
for(int i=0;i<size;i++){
res.insert(res.begin()+input[i].k,input[i]);
}
//解封装
vector<vector<int>> ans;
for(int i=0;i<size;i++){
vector<int> tmp;
tmp.push_back(res[i].h);
tmp.push_back(res[i].k);
ans.push_back(tmp);
}
return ans;
}
};
码后反思
- 其实可以直接使用
vector
进行排序的,不用使用结构体的:
class Solution {
public:
static bool cmp(vector<int>& a,vector<int>& b){
return a[0]!=b[0] ? a[0]>b[0] : a[1]<b[1];
}
vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {
vector<vector<int>> res;
int size = people.size();
sort(people.begin(),people.end(),cmp);
for(int i=0;i<size;i++){
res.insert(res.begin()+people[i][1],people[i]);
}
return res;
}
};
但是时间复杂度并不优秀~~
下面是在cmp
里面没有使用&
的
下面是在cmp
里面使用了&
的
看来有时候麻烦的东西也有那么一点用