### 解题思路
脑阔疼,思路很快就想到了,但是在写代码时不是遗漏了这个,就是忘写了那个,debug花了好久。
首先排序,优先按照身高升序排序,如果身高相同,按照人数(第二列)升序排序。
从最后一个人开始下手,向前遍历。
如果people[i][1]为0或者k,如果前面正好有k个和people[i][1]同样高的人,则不用处理,直接跳过,如果k比前面与people[i][1]同样高的人的数量(n)多,则k-n,得到people[i][1]还需要有k-n个比他高的人。
所以,将people[i][1]后的k-n个人依次向前移一位,而people[i][1]则放到i+k-n的位置。
vector<vector<int> > reconstructQueue(vector<vector<int> >& people) {
int s=people.size(),t=0,m=0,n=0;
// sort(people.begin(),people.end(),cmp);
sort(people.begin(),people.end());//默认按照数组第一列升序排序,如果第一列相同,按照第二列升序排序
for(int i=s-2;i>=0;i--){
t=people[i][1];
m=people[i][0];
n=0;
for(int k=0;k<i;k++){
if(people[k][0]==people[i][0]) n++;
}
for(int j=0;j<t-n;j++){
people[i+j][0]=people[i+j+1][0];
people[i+j][1]=people[i+j+1][1];
}
people[i+t-n][0]=m;
people[i+t-n][1]=t;
}
return people;
}
int main(){
vector<vector<int> > people(6);//vector二维数组初始化方法
vector<int> peo;
int value;
for(int i=0;i<6;i++)
for(int j=0;j<2;j++){
cin>>value;
people[i].push_back(value);
}
reconstructQueue(people);
for(int i=0;i<6;i++)
for(int j=0;j<2;j++){
cout<<people[i][j]<<" ";
}
return 0;
}