โ† All problems

3169. Count Days Without Meetings

MediumOpen on LeetCodeProblem statement

Problem Statement

3169. Count Days Without Meetings

Medium


You are given a positive integer days representing the total number of days an employee is available for work (starting from day 1). You are also given a 2D array meetings of size n where, meetings[i] = [start_i, end_i] represents the starting and ending days of meeting i (inclusive).

Return the count of days when the employee is available for work but no meetings are scheduled.

Note: The meetings may overlap.

 

Example 1:

Input: days = 10, meetings = [[5,7],[1,3],[9,10]]

Output: 2

Explanation:

There is no meeting scheduled on the 4th and 8th days.

Example 2:

Input: days = 5, meetings = [[2,4],[1,3]]

Output: 1

Explanation:

There is no meeting scheduled on the 5th day.

Example 3:

Input: days = 6, meetings = [[1,6]]

Output: 0

Explanation:

Meetings are scheduled for all working days.

 

Constraints:

Java โ€” line sweep

Source file
class Solution {
    public int countDays(int days, int[][] meetings) {
        TreeMap<Integer, Integer> calendar = new TreeMap<>();
        for (int[] m : meetings) {
            calendar.put(m[0], calendar.getOrDefault(m[0], 0) + 1);
            calendar.put(m[1] + 1, calendar.getOrDefault(m[1] + 1, 0) - 1);
        }
        int concurrentMeets = 0, prevDay = calendar.firstKey(), freeDays = calendar.firstKey();
        for (Map.Entry<Integer, Integer> e : calendar.entrySet()) {
            if (concurrentMeets == 0) {
                freeDays += e.getKey() - prevDay;
            }
            concurrentMeets += e.getValue();
            prevDay = e.getKey();
        }
        return freeDays + days - prevDay;
    }
}