406.根据身高重建队列
本题有2个维度,一个是身高,一个是排在前面的人数,与分发糖果一样有2个维度,只能是先固定一个维度再去考虑另一个维度,不能两个同时考虑。
身高h按从大到小排序,这样后续从后往前插入调整顺序的时候,被插入的位置之后的元素的k不受影响,因为此元素一定大于插入的元素,因此该元素不受影响。
本题步骤:
1.按身高从大到小,k值从小到大排序。
2.遍历people数组,得到每一个people元素的k值people[i][1]
3.将每一个people元素插入到que数组中
class Solution {
public:
static bool cmp(const vector<int>& a,const vector<int>& b){//a可看成前元素和b可看成后元素
if(a[0] == b[0]){ //身高相等,按k从小到大排序
return a[1] < b[1];
}
return a[0] > b[0]; //按身高从大到小排序
}
vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {
sort(people.begin(),people.end(),cmp);
vector<vector<int>>que;
for(int i = 0;i<people.size();i++){
int position = people[i][1];//对应每个元素的k
//插入对应的位置
que.insert(que.begin()+position,people[i]);
}
return que;
}
};