Count Days Without Meetings

medium intervals merge

Problem

An employee works for days consecutive days, numbered 1 to days. A list of meetings is scheduled, where each meeting [start, end] occupies every day from start to end inclusive (1 ≤ start ≤ end ≤ days), and meetings may overlap each other.

Return how many of the days work days have no meeting scheduled at all.

Inputdays = 10, meetings = [[5,7],[1,3],[9,10]]
Output2
Only days 4 and 8 have no meetings; every other day is covered by at least one meeting.

def count_days(days, meetings):
    meetings.sort()
    covered = 0
    cur_end = 0
    for start, end in meetings:
        if start > cur_end:
            covered += end - start + 1
            cur_end = end
        elif end > cur_end:
            covered += end - cur_end
            cur_end = end
    return days - covered
function countDays(days, meetings) {
  meetings.sort((a, b) => a[0] - b[0]);
  let covered = 0, curEnd = 0;
  for (const [start, end] of meetings) {
    if (start > curEnd) {
      covered += end - start + 1;
      curEnd = end;
    } else if (end > curEnd) {
      covered += end - curEnd;
      curEnd = end;
    }
  }
  return days - covered;
}
int countDays(int days, int[][] meetings) {
    Arrays.sort(meetings, (a, b) -> a[0] - b[0]);
    int covered = 0, curEnd = 0;
    for (int[] m : meetings) {
        if (m[0] > curEnd) {
            covered += m[1] - m[0] + 1;
            curEnd = m[1];
        } else if (m[1] > curEnd) {
            covered += m[1] - curEnd;
            curEnd = m[1];
        }
    }
    return days - covered;
}
int countDays(int days, vector<vector<int>>& meetings) {
    sort(meetings.begin(), meetings.end());
    int covered = 0, curEnd = 0;
    for (auto& m : meetings) {
        if (m[0] > curEnd) {
            covered += m[1] - m[0] + 1;
            curEnd = m[1];
        } else if (m[1] > curEnd) {
            covered += m[1] - curEnd;
            curEnd = m[1];
        }
    }
    return days - covered;
}
Time: O(n log n) Space: O(1)