思路:
算法可以按以下步骤进行:
- 先把这一群人按某种顺序排列
- 依据上述的顺序,加入到一个新的集合达成重新排列
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; } };