【代码随想录day 29】 力扣 406.根据身高重建队列
视频讲解:https://www.bilibili.com/video/BV1EA411675Y/?vd_source=a935eaede74a204ec74fd041b917810c
文档讲解:https://programmercarl.com/0406.%E6%A0%B9%E6%8D%AE%E8%BA%AB%E9%AB%98%E9%87%8D%E5%BB%BA%E9%98%9F%E5%88%97.html#%E6%80%9D%E8%B7%AF
力扣题目:https://leetcode.cn/problems/queue-reconstruction-by-height/
如果正向排序的话,需要考虑h的大小关系以及位次关系,但是如果倒着看的话,先将队列按从大到小的顺序排序,如果h相等,优先排k小的数组,这样就可以保证前面的数稳定大于后面的书,这时我们考虑k的大小,将数组插入到合适的位置,比如[7,0][7,1][5,0]就可以插入到第一个位置,变为[5,0][7,0][7,1],从后往前插入不需要考虑前面的数组的k,比如[7,1]就不用考虑,因为后面的插入到前面也不会影响他的k,所以就可以使用这个方法
class Solution {
public:static bool cmp(const vector<int> &a, const vector<int> &b){//如果相等,k小的排在前面if(a[0] == b[0]){return a[1] < b[1];}//如果不相等,h大的排前面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];que.insert(que.begin() + position, people[i]);}return que;}
};