思路:先按照顺序,对数组进行排序
身高和编号两个维度
身高按照降序排列:因为先访问身高高的,插入数组里边,后续再插入的时候之前元素编号是不会变化的
编号升序排列:这样按照访问顺序,编号高的就可以后插入
涉及到插入,用list更方便一些,插入的时候元素编号是多少就插入到哪个位置(已经是按照降序排列了,已经插入形成的数组的元素都比要插入的元素大,所以编号是多少,他在新插入的数组中的位置就是多少)
class Solution {
public:
static bool comp(vector<int>&s1, vector<int>&s2)
{
return s1[0] == s2[0] ? s1[1]<s2[1] : s2[0]>s1[0];
}
vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {
//按照身高排序
sort(people.begin(), people.end(),comp);
list<vector<int>>lt;
//有点像插入排序
for (int i = 0; i <people.size() ; i++)
{
int position = people[i][1];
std::list<vector<int>>::iterator iter = lt.begin();
while (position--)
{
iter++;
}
lt.insert(iter, people[i]);
}
return vector<vector<int>>(lt.begin(), lt.end());
}
};