Leetcode 406 Solution

This article provides solution to leetcode question 406 (queue-reconstruction-by-height)

https://leetcode.com/problems/queue-reconstruction-by-height

Solution

class Solution {
public:
    vector<pair<int, int>> reconstructQueue(vector<pair<int, int>>& people) {
        vector<pair<int, int>> res;
        vector<pair<int, int>> a(people.begin(), people.end());
        vector<bool> b(people.size());

        while (res.size() < people.size())
        {
            int low_pos = -1;

            for (int i = 0; i < a.size(); i++)
            {
                if (b[i])
                    continue;

                if (low_pos == -1 && a[i].second == 0)
                    low_pos = i;
                else if (a[low_pos].first > a[i].first && a[i].second == 0)
                    low_pos = i;
            }

            b[low_pos] = true;
            res.push_back(people[low_pos]);

            for (int i = 0; i < a.size(); i++)
            {
                if (b[i] == true)
                    continue;

                if (a[low_pos].first >= a[i].first)
                    a[i].second--;
            }
        }

        return res;
    }
};