406. Queue Reconstruction by Height
思路:这道题其实本质是一个排序问题,将pair元素排列,使得前面大于它的first元素的个数等于second。
思考一下很容易发现,对于那些height最低的元素,second就是他们的位置,所以可以直接先排列height最低的元素,排完之后会发现其实剩下的与之前类似,排第二低元素的时候只是有些位置被第一低元素占了,但是这并不影响什么,因为第二元素之前的空位置数必须为second才行,这样发现其实所有的元素都是这样排列的,所以只需要将元素从低到高排,前面的空位置数等于它的second即可。
bool f(pair<int, int>a, pair<int, int>b) { if (a.first < b.first) return 1; else if (a.first == b.first) return a.second>b.second; else return 0; } class Solution { public: vector<pair<int, int>> reconstructQueue(vector<pair<int, int>>& people) { vector<pair<int, int>> t = people; int l = t.size(); sort(t.begin(), t.end(), f); bool e[1101] = {}; for (int i = 0; i <l; i++) { int j = 0; int k = 0; for (; j != t[i].second; k++) { if (!e[k]) ++j; } for (; e[k] != 0; k++); e[k] = 1; people[k] = t[i]; } return people; } };