Leetcode::count days without meetings

point

Design

Big O(time)

Code

Line sweeping

class Solution {
public:
    int countDays(int days, vector<vector<int>>& meetings) {
        map<int,int> dayMap;
        int prefixSum = 0, previous = days;
        for (auto meeting : meetings) {
            previous = min(previous, meeting[0]);
            dayMap[meeting[0]]++;
            dayMap[meeting[1] + 1]--;
        }

        int ans = previous - 1;
        for(auto day : dayMap) {
            int currentDay = day.first;
            if (prefixSum == 0)
                ans += (currentDay - previous);
            
            prefixSum += day.second;
            previous = currentDay;
        }

        ans += (days - previous + 1);
        return ans;
    }
};

Sorting

class Solution {
public:
    int countDays(int days, vector<vector<int>>& meetings) {
        sort(meetings.begin(), meetings.end());

        int le = meetings[0][0], ri = meetings[0][1];
        int ans = le - 1;
        for(int i = 1; i < meetings.size(); i++) {
            if (ri < meetings[i][0]) {
                ans += (meetings[i][0] - ri - 1);
                le = meetings[i][0], ri = meetings[i][1];
            } else {
                ri = max(ri, meetings[i][1]);
            }
        }
        ans += (days - ri);

        return ans;
    }
};