题目描述:
假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(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]]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/queue-reconstruction-by-height
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解:
class Solution {
public:
static bool cmp(const vector<int>& v1,const vector<int> &v2)
{
if(v1[0] != v2[0])
return v1[0] > v2[0];
else
return v1[1] < v2[1];
}
vector<vector<int>> reconstructQueue(vector<vector<int>>& people)
{
int n = people.size();
vector<vector<int>> res;
if(n == 0)
return res;
sort(people.begin(),people.end(),cmp);
for(auto i:people)
{
res.insert(res.begin()+i[1],i);
}
return res;
}
};
解题思路:
将原数组排序,身高的高的在前面,相同身高的,按前面的人数从小到大排序。
然后对排好序的数组,按顺序依次插入数组。因为前面插入的总会比后边的大,比当前身高高的都已经插进来了,所以可以保证题目的要求。