Leetcode 406. Queue Reconstruction by Height[Medium]
阿新 • • 發佈:2018-12-11
原題地址
題目內容
題目分析
題目的主要意思為,給你一串陣列,讓你對其進行“排序”,每個元素由兩個值構成(a,b),a代表這個字元的大小,b代表有多少個比他大或者等於他的數字排在他前面,這就是最後生成的陣列需要滿足的條件。
首先我們可以對陣列按照a進行從大到小的排序,如果a相同的話,就按照b來排,按照題目的要求,應該是b小的排在前面。定義一個結果陣列res,排好序的陣列在這個res裡面的順序,就是b的值的大小了
比如此時的順序為:
[[7,0], [7,1] , [6,1] , [5,0]] , [5,2] , [4,4] ]
那麼首先插入[7,0]在res[0]的位置,[7,1]在res[1],
[6,1]由於b是1,那麼他就在res[1],此時[7,1]向後挪一位,所以res=[[7,0],[6,1],[7,1]]
接著是[5,0]因為b=0,所以他插在res[0]的位置,以此類推。
主要是參考了discuss
程式碼實現
class Solution {
public:
vector<pair<int, int>> reconstructQueue(vector<pair<int, int>>& people) {
for(int i = 0; i < people.size(); i++){
for(int j = 0; j < people.size(); j++){
if(people[i].first > people[j].first ||
(people[i].first == people[j].first && people[i].second < people[j].second) ){
pair<int ,int> temp;
temp = people[i];
people[i] = people[j];
people[j] = temp;
}
}
}
vector< pair<int,int> > res;
for(int i = 0; i < people.size(); i++){
res.insert(res.begin()+people[i].second,people[i]);
}
return res;
}
};