标签:col turn div 等于 随机 begin 支持 pre cto
题目描述:
假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。
注意:
总人数少于1100人。
示例
输入:
[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]
输出:
[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]
思想:
[h,k]
时,已处于队列的人身高都>=h
,所以新排入位置就是people[k]
实现:
代码:
class Solution { public: vector<vector<int>> reconstructQueue(vector<vector<int>>& people) { sort(people.begin(),people.end(), [](const vector<int>&lhs,const vector<int>&rhs) //先按h递减排序,h相同按k递增排序 {return lhs[0]==rhs[0] ? lhs[1]<=rhs[1] : lhs[0]>rhs[0];} ); int len = people.size(); list<vector<int>> tmp; for(int i=0;i<len;i++){ auto pos = tmp.begin(); //注意此处的pos要用auto advance(pos,people[i][1]); //advance将pos指向的位置后移people[i][1] tmp.insert(pos,people[i]); } return vector<vector<int>> (tmp.begin(),tmp.end()); } };
标签:col turn div 等于 随机 begin 支持 pre cto
原文地址:https://www.cnblogs.com/thefatcat/p/12842184.html