代码随想录day20:406.根据身高重建队列

题目链接:406. 根据身高重建队列 - 力扣(LeetCode)
二维的问题一定要先确定一维,不能同时考虑两维。
这里优先确定身高顺序从高到低,之后遍历数组,根据people的第二个元素的值与i的关系判断是否可以直接push,不满足条件则根据第二个元素的值从begin后移people[i][0]再插入,因为之前排过序的缘故,res中全是比当前身高高的人,所以只需要考虑后移几位即可。
代码如下:
class Solution {
public://重写sort排序谓词static bool px(const vector<int>&a,const vector<int>&b){if(a[0]>b[0]) return true;else if(a[0]==b[0]) return a[1]<b[1];return false;}vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {//按照先根据身高排序,如果身高相等再根据前面人的个数从低到高排序sort(people.begin(),people.end(),px);vector<vector<int>> res;//遍历 因为此时遍历people的顺序一定是从高到低,那么i还代表了前面已经有几个大于等于当前身高的人了//如果大于等于的人数比people[i][1]大,那么说明肯定不能直接插,要根据people[i][1]的值从res的开头向后移动people[i][1]再插入,保证people[i][1]是正确的for(int i=0;i<people.size();++i){if(i==people[i][1]) res.push_back(people[i]);else if(i>people[i][1]) res.insert(res.begin()+people[i][1],people[i]);}return res;}
};
