题意
将一群人按排好序,然后制定了一个规则为people[i]=[hi,ki];hi表示该位置人的身高,ki表示i前面身高大于或等于i身高的人数
思路
按身高从小到大的顺序放入队列中,i前面有身高比他低的人对ki的值没有影响,所以可以假设后面放进来的都是比前面身高高的,
这样我们可以根据k值来决定该点应该放入的位置。对于身高相同的人来说,因为后放代表会对前面放的产生影响,所以我们可以规定身高相同的k值越大,身高越小。
code:
class Solution {
private:
static bool cmp(vector<int>&u,vector<int>&v){
return u[0]<v[0] || (u[0]==v[0] && u[1]>v[1]);
}
public:
vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {
sort(people.begin(),people.end(),cmp);
int n=people.size();
vector<vector<int>>ans(n);
for(int i=0;i<people.size();i++){
int space=people[i][1]+1;
for(int j=0;j<n;j++){
if(ans[j].empty()){
space--;
if(!space) ans[j]=people[i];
}
}
}
return ans;
}
};