https://leetcode-cn.com/problems/queue-reconstruction-by-height/
大的看不到前面小的,所以在大的插入小的,不影响。
先按照身高从大到小、位置从前到后排序。然后插入到结果当中,当前结果的都是大于等于当前数字的,插入后不会影响已经插入的结果,同理,以后插入的也不会影响现在的结果,所以插入到现在的位置k。
多次插入使用链表,使用advance来获得链表的某个位置,插入使用迭代器。
bool cmp(const vector<int> &a,const vector<int> &b){
if(a[0]!=b[0])
return a[0]>b[0];
return a[1]<b[1];
}
class Solution {
public:
vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {
int n=people.size();
sort(people.begin(),people.end(),cmp);
list<vector<int>> ans;
for(int i=0;i<n;i++){
auto pos=ans.begin();
advance(pos,people[i][1]);
ans.insert(pos,people[i]);
}
return vector<vector<int>>(ans.begin(),ans.end());
}
};