题目
分析
h代表的是人的身高,k代表的是前面比身高大于等于他的人的人数; 因此,为了知道一个一人前面有多少身高大于等于他的人,应当依据h进行降序排列; 并且我们知道,对于同等身高的人来说,k应当是升序的; 所以,自定义排序方法:对h降序排列,对k升序排列,并定义结果数组res,然后遍历这个排好序的数组,对于其k要大于等于当前res长度的(这个长度代表实际身高大于等于这个人的人数),直接插入末尾,而对于其k要小于当前res长度的需要插入到其k所指定的位置
代码
bool cmp(const vector<int>& a,const vector<int>& b){
if(a[0] == b[0])
return a[1]<b[1];
return a[0]>b[0];
}
class Solution {
public:
vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {
vector<vector<int>> res;
sort(people.begin(),people.end(),cmp);
for(int i=0;i<people.size();i++){
if(people[i][1]>=res.size())
res.push_back(people[i]);
else{
res.insert(res.begin()+people[i][1],people[i]);
}
}
return res;
}
};