1. 程式人生 > >Leetcode 406. Queue Reconstruction by Height[Medium]

Leetcode 406. Queue Reconstruction by Height[Medium]

原題地址

題目內容

這裡寫圖片描述

題目分析

題目的主要意思為,給你一串陣列,讓你對其進行“排序”,每個元素由兩個值構成(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; } };