题目406. Queue Reconstruction by Height
等级:medium
标签:贪心
思路
现对people数组基于pair的第一个元素(身高)排序,身高从小到大,逐一将people[i]放到结果vector的合适位置,放置方法是,对于结果vector,从左往右跳过people[i].second个有效位置(即还未放置pair的位置,或该位置已经放置了一个pair, 但是pair.first >= people[i].first),然后将people放在下一个有效位置上
实现
/**
**/
# include <iostream>
# include <vector>
# include <algorithm>
using namespace std;
bool cmp(const pair<int, int> a, const pair<int, int> b) {
return a.first < b.first;
}
class Solution {
public:
vector<pair<int, int> > reconstructQueue(vector< pair<int, int> >& people) {
int size = people.size();
if(size <= 1) return vector< pair<int, int> >(people);
vector< pair<int, int> > ret(size, make_pair(-1, -1));
sort(people.begin(), people.end(), cmp);
for(int i = 0; i < size; i++) {
int ahead = people[i].second, pos = -1;
for(int j = 0; j < ahead + 1; j++) {
pos++;
// find a blank position;
while(ret[pos].first != -1 && ret[pos].first < people[i].first) pos++;
}
ret[pos] = people[i];
}
return ret;
}
};