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;
        
    }
};
發佈了40 篇原創文章 · 獲贊 19 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章