Minimum Rooms, Merged Busy Blocks and Conflict Handling for Meeting Intervals

Read the full interview experience this question came from →

Quick Overview

A multi-part coding question built on the classic meeting-room scheduling problem: find the minimum number of rooms for a set of meetings, merge overlapping meetings into busy blocks, and detect and handle booking conflicts. It tests interval ordering, endpoint conventions, sweep reasoning and efficient lookups.

Minimum Rooms, Merged Busy Blocks and Conflict Handling for Meeting Intervals

Company: Uber

Role: Software Engineer

Category: Software Engineering Fundamentals

Difficulty: medium

Interview Round: Technical Screen

You are given a list of meetings, each a pair `[start, end]` of integer times with `start < end`. The coding round opened with the classic meeting-room problem and then asked two follow-ups: how to merge meetings whose start and end times differ, and how to handle conflicts. The exact details of the follow-ups were not reported, and the interviewer mainly wanted a clearly explained approach, so each Part below states the standard form of its question and leaves the open policies as clarifying questions. Unless the interviewer says otherwise, treat a meeting as the half-open interval from `start` up to but not including `end`, so a meeting that ends at 10 and one that starts at 10 do not overlap. ```text meetings = [[9, 10], [9, 12], [11, 13], [14, 15]] minimum number of rooms -> 2 merged busy blocks -> [[9, 13], [14, 15]] meetings overlapping [12, 14] -> [[11, 13]] ``` ### Clarifying Questions - Should meetings that share an endpoint, such as `[9, 10]` and `[10, 11]`, count as overlapping? - Are all meetings known up front, or do booking requests arrive one at a time and need an immediate answer? - How many meetings can there be, and may the input list be reordered in place? - When a conflict is found, should it be reported, rejected, or resolved by moving the meeting to another room or time? ### Part 1 — Minimum number of rooms Implement `min_rooms(meetings) -> int`: the fewest rooms that can host every meeting so that no room ever holds two overlapping meetings. ```hint Watch the clock Think about how many meetings are running at each moment, and which moments are the only ones worth examining. ``` #### What This Part Should Cover - An O(n log n) algorithm, with an argument that its answer is both necessary and sufficient - Correct handling of a meeting that starts exactly when another ends - Time and space complexity ### Part 2 — Merge overlapping meetings The meetings have different start and end times and may partially overlap, nest inside one another or chain together. Implement `merge_meetings(meetings) -> list[list[int]]`, returning the disjoint blocks of time during which at least one meeting is running, sorted by start. ```hint Choose the visiting order Pick an order in which to visit the meetings so that each new one can only touch the block you are currently building. ``` #### What This Part Should Cover - Correct results for nested, chained and back-to-back meetings - The ordering the algorithm relies on, and why one pass is then enough - Complexity, and whether the caller's list is modified ### Part 3 — Handle conflicts Two meetings conflict when their time ranges overlap. Show how to detect conflicts in two situations: a new request checked against the meetings already booked in a room, and every conflicting pair within a list of meetings. Then explain how you would handle a request that conflicts. ```hint Keep bookings searchable For a single request, decide how the existing bookings should be stored so that you only look at the few that could possibly overlap it. ``` #### Clarifying Questions for this Part - Is there one room or several, and may a conflicting request be placed in a different room? - Should a rejected request come back with the meetings it conflicts with, or with the next free slot of the same length? #### What This Part Should Cover - A correct overlap test for two meetings, including shared endpoints - Efficient detection for one new request and for all conflicting pairs, with complexity - At least two ways to handle a conflicting request and the data each one needs ### What a Strong Answer Covers - Settles the endpoint convention, the input size and the batch-versus-online question before coding - Algorithms for counting rooms and for merging, each with a correctness argument and its complexity - One consistent endpoint convention across all three Parts - Tests for an empty list, a single meeting, identical meetings, nested meetings and back-to-back meetings - A clear explanation of the approach before and during coding ### Follow-up Questions - Return not only the number of rooms but also which room each meeting is assigned to. - Booking requests arrive one at a time throughout the day. How do you answer each one in O(log n)? - Meetings now carry priorities, and a higher-priority request may displace a lower-priority booking. What changes? - Given several people's calendars, find the earliest slot of a given length when all of them are free.

Overview: A multi-part coding question built on the classic meeting-room scheduling problem: find the minimum number of rooms for a set of meetings, merge overlapping meetings into busy blocks, and detect and handle booking conflicts. It tests interval ordering, endpoint conventions, sweep reasoning and efficient lookups.

Read the full Uber Software Engineer interview experience this question came from

Uber logo
Uber
Dec 6, 2025
mediumSoftware EngineerTechnical ScreenSoftware Engineering Fundamentals
1
0

You are given a list of meetings, each a pair [start, end] of integer times with start < end. The coding round opened with the classic meeting-room problem and then asked two follow-ups: how to merge meetings whose start and end times differ, and how to handle conflicts. The exact details of the follow-ups were not reported, and the interviewer mainly wanted a clearly explained approach, so each Part below states the standard form of its question and leaves the open policies as clarifying questions.

Unless the interviewer says otherwise, treat a meeting as the half-open interval from start up to but not including end, so a meeting that ends at 10 and one that starts at 10 do not overlap.

meetings = [[9, 10], [9, 12], [11, 13], [14, 15]]

minimum number of rooms           ->  2
merged busy blocks                ->  [[9, 13], [14, 15]]
meetings overlapping [12, 14]     ->  [[11, 13]]

Clarifying Questions Guidance

  • Should meetings that share an endpoint, such as [9, 10] and [10, 11] , count as overlapping?
  • Are all meetings known up front, or do booking requests arrive one at a time and need an immediate answer?
  • How many meetings can there be, and may the input list be reordered in place?
  • When a conflict is found, should it be reported, rejected, or resolved by moving the meeting to another room or time?

Part 1 — Minimum number of rooms

Implement min_rooms(meetings) -> int: the fewest rooms that can host every meeting so that no room ever holds two overlapping meetings.

What This Part Should Cover Guidance

  • An O(n log n) algorithm, with an argument that its answer is both necessary and sufficient
  • Correct handling of a meeting that starts exactly when another ends
  • Time and space complexity

Part 2 — Merge overlapping meetings

The meetings have different start and end times and may partially overlap, nest inside one another or chain together. Implement merge_meetings(meetings) -> list[list[int]], returning the disjoint blocks of time during which at least one meeting is running, sorted by start.

What This Part Should Cover Guidance

  • Correct results for nested, chained and back-to-back meetings
  • The ordering the algorithm relies on, and why one pass is then enough
  • Complexity, and whether the caller's list is modified

Part 3 — Handle conflicts

Two meetings conflict when their time ranges overlap. Show how to detect conflicts in two situations: a new request checked against the meetings already booked in a room, and every conflicting pair within a list of meetings. Then explain how you would handle a request that conflicts.

Clarifying Questions for this Part Guidance

  • Is there one room or several, and may a conflicting request be placed in a different room?
  • Should a rejected request come back with the meetings it conflicts with, or with the next free slot of the same length?

What This Part Should Cover Guidance

  • A correct overlap test for two meetings, including shared endpoints
  • Efficient detection for one new request and for all conflicting pairs, with complexity
  • At least two ways to handle a conflicting request and the data each one needs

What a Strong Answer Covers Guidance

  • Settles the endpoint convention, the input size and the batch-versus-online question before coding
  • Algorithms for counting rooms and for merging, each with a correctness argument and its complexity
  • One consistent endpoint convention across all three Parts
  • Tests for an empty list, a single meeting, identical meetings, nested meetings and back-to-back meetings
  • A clear explanation of the approach before and during coding

Follow-up Questions Guidance

  • Return not only the number of rooms but also which room each meeting is assigned to.
  • Booking requests arrive one at a time throughout the day. How do you answer each one in O(log n)?
  • Meetings now carry priorities, and a higher-priority request may displace a lower-priority booking. What changes?
  • Given several people's calendars, find the earliest slot of a given length when all of them are free.