406. Queue Reconstruction by Height | Leecode Greedy

来源:互联网 发布:php while 死循环 编辑:程序博客网 时间:2024/05/24 05:10

Description

Suppose you have a random list of people standing in a queue. Each person is described by a pair of integers (h, k), where h is the height of the person and k is the number of people in front of this person who have a height greater than or equal to h. Write an algorithm to reconstruct the queue.

Note:
The number of people is less than 1,100.
Example
这里写图片描述
Difficulty: Medium

Thinking

题目要求重新排列数列,符合h代表本人高度,k代表在本人前面且比本人更高或等高的人数。可以采用以下方法:
先将队列按从高到矮进行排列,最高的人排在队伍的最前面,我们可以发现最高的人位置此时取决于他们的k值;
然后将队列中剩下的人遍历一遍,以遍历顺序为序,将他们按k值一个个重新插入到队列的begin + k位置中;
最后将队列返回即可。

Solution

class Solution {public:    static bool cmp(pair<int, int> a, pair<int, int> b){        return ((a.first > b.first) || (a.first == b.first && a.second < b.second));    }    vector<pair<int, int>> reconstructQueue(vector<pair<int, int>>& people) {        int size = people.size();        sort(people.begin(), people.end(), cmp);        vector<pair<int, int>> res;        for(int i = 0; i < size; i++){            res.insert(res.begin() + people[i].second, people[i]);        }        return res;    }};
原创粉丝点击