【LeetCode】406-根据身高重建队列

 

 思路:

算法可以按以下步骤进行:

  1. 先把这一群人按某种顺序排列
  2. 依据上述的顺序,加入到一个新的集合达成重新排列

1 中所说的某种顺序,根据题目要求应该为身高降序,也就是说先考虑把身高较高的人放入新集合,这样在高个子前面或后面插入矮个子都不会影响当前高个子的k值;其次,k值应该升序排列,k值较大的较后插入。

按 1 中排好的顺序,将每个元素插入队列的第k个位置。

代码:

class Solution {
public:
    vector<vector<int>> result;
    static bool comp(vector<int>& a, vector<int>& b)
    {
        if (a[0] == b[0]) {
            return a[1] < b[1];
        }
        return a[0] > b[0];
    }
    vector<vector<int>> ReconstructQueue(const vector<vector<int>>& people)
    {
        vector<vector<int>> oriData;
        oriData.assign(people.begin(), people.end());
        sort(oriData.begin(), oriData.end(), comp);
        for (int i = 0; i < people.size();i++) {
            int pos = oriData[i][1];
            result.insert(result.begin()+pos, oriData[i]);
        }
        return result;
    }
};

 

posted @ 2022-04-08 09:14  A-inspire  Views(44)  Comments(0Edit  收藏  举报