5. Maximum Population Year

You are given a 2D integer array logs where each logs[i] = [birthi, deathi] indicates the birth and death years of the ith person.

The population of some year x is the number of people alive during that year. The ith person is counted in year x's population if x is in the inclusive range [birthi, deathi - 1]. Note that the person is not counted in the year that they die.

Return the earliest year with the maximum population.

Example 1:

Input: logs = [[1993,1999],[2000,2010]]
Output: 1993
Explanation: The maximum population is 1, and 1993 is the earliest year with this population.

Example 2:

Input: logs = [[1950,1961],[1960,1971],[1970,1981]]
Output: 1960
Explanation: 
The maximum population is 2, and it had happened in years 1960 and 1970.
The earlier year between them is 1960.

Solution: (Similar to car pooling)

Maintaining the count of population at each time stamp

class Solution
{
public:
    int maximumPopulation(vector<vector<int>> &logs)
    {

        priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
        for (int i = 0; i < logs.size(); i++)
        {

            pq.push({logs[i][0], 1});
            pq.push({logs[i][1], -1});
        }

        int maxPeople = 0;
        int maxYear = 0;
        int person = 0;

        while (!pq.empty())
        {

            int year = pq.top().first;
            int c = pq.top().second;
            pq.pop();
            person += c;

            if (person > maxPeople)
            {
                maxPeople = person;
                maxYear = year;
            }
        }

        return maxYear;
    }
};

Last updated