Solve meeting scheduling and robot cleaning tasks
Company: Google
Role: Machine Learning Engineer
Category: Coding & Algorithms
Difficulty: medium
Interview Round: Technical Screen
You are given two independent coding problems.
---
### Problem 1: Prioritized Meeting Scheduling
You are asked to schedule meetings in a single meeting room.
You are given an array of meeting requests. Each request is represented as a tuple:
- `start`: integer start time (inclusive)
- `end`: integer end time (exclusive), with `end > start`
- `priority`: an integer representing the importance / value of that meeting
No two meetings can overlap in time in the single room. Your goal is to choose a subset of **non-overlapping** meetings to **maximize the sum of priorities**.
Write a function with the following signature (language-agnostic):
```text
int maxTotalPriority(Meeting[] meetings)
```
that returns the maximum possible total priority.
**Example**
Input:
```text
meetings = [
(1, 3, 4),
(2, 4, 3),
(3, 5, 2),
(0, 6, 7)
]
```
One optimal schedule is to pick meetings `(1,3,4)` and `(3,5,2)` for a total priority of `4 + 2 = 6`.
Another choice, `(0,6,7)`, has total priority `7`, which is better, so the answer is `7`.
**Constraints**
- `1 <= n <= 2 * 10^5` where `n` is the number of meetings
- `0 <= start < end <= 10^9`
- `-10^4 <= priority <= 10^4` (priorities can be non‑positive; you may choose to skip such meetings)
- Time complexity should be **O(n log n)** or better.
- You may assume `meetings` is given as a list/array in arbitrary order.
Describe the algorithm and then implement the function.
---
### Problem 2: Robot Room Cleaning on an Unknown Grid
You are controlling a vacuum cleaning robot in a 2D grid room. The room is divided into 1x1 cells. Each cell is either **empty** or **blocked**. The robot:
- Starts on an **empty** cell in an **unknown** position in this room.
- Does **not** know the layout of the room in advance.
- Only knows about the cell it is currently in and whether the cell in front of it is blocked when it tries to move.
You are given the following interface:
```text
interface Robot {
// returns true if the cell in front is open and the robot moves into the cell.
// returns false if the cell in front is blocked and the robot stays in the current cell.
boolean move();
// robot will stay in the same cell, but turn 90 degrees to the left.
void turnLeft();
// robot will stay in the same cell, but turn 90 degrees to the right.
void turnRight();
// clean the current cell.
void clean();
}
```
The robot is initially facing **up** (towards negative y direction in some internal coordinate system you choose).
You must implement a function:
```text
void cleanRoom(Robot robot)
```
that makes the robot **clean all reachable empty cells**. You **cannot**:
- Directly access the room grid or its dimensions.
- Track the robot's absolute position from the environment; you must build your own coordinate system relative to the starting cell.
You **can**:
- Maintain an internal set of visited coordinates in your own coordinate system (e.g., treat the starting cell as `(0,0)`).
- Move, turn, and clean using only the provided API.
**Constraints and assumptions**
- The number of reachable empty cells is at most 200.
- The room is bounded (finite) but shape and size are unknown.
- The robot must eventually stop after all reachable cells have been cleaned (no infinite loops).
Design an algorithm and implement `cleanRoom(Robot robot)` to guarantee that all reachable empty cells are cleaned.
Quick Answer: The first problem evaluates algorithmic optimization and interval scheduling concepts—specifically reasoning about selecting non‑overlapping intervals to maximize aggregate priority under time constraints—while the second evaluates exploration, stateful search and backtracking skills for traversing an unknown grid via a limited robot API.
Part 1: Prioritized Meeting Scheduling
You are given a list of meeting requests for a single meeting room. Each meeting is represented as a tuple (start, end, priority), where start is inclusive, end is exclusive, and end > start. No two chosen meetings may overlap, but one meeting may start exactly when another ends. Return the maximum total priority obtainable by choosing a subset of non-overlapping meetings. Priorities may be negative or zero, and you may skip any meeting.
Constraints
- 0 <= len(meetings) <= 2 * 10^5
- 0 <= start < end <= 10^9
- -10^4 <= priority <= 10^4
- Meetings are given in arbitrary order.
- Expected time complexity is O(n log n) or better.
Examples
Input: ([(1, 3, 4), (2, 4, 3), (3, 5, 2), (0, 6, 7)],)
Expected Output: 7
Explanation: Taking only (0, 6, 7) gives priority 7, which is better than taking (1, 3, 4) and (3, 5, 2), which gives 6.
Input: ([(5, 7, 4), (1, 2, 5), (2, 5, 6)],)
Expected Output: 15
Explanation: All three meetings are compatible because each starts when or after the previous one ends.
Input: ([(0, 2, -5), (2, 4, -1), (4, 5, 0)],)
Expected Output: 0
Explanation: All priorities are non-positive, so skipping every meeting is optimal.
Input: ([(1, 4, 5), (2, 6, 6), (4, 7, 5), (6, 8, 4), (7, 9, 4)],)
Expected Output: 14
Explanation: An optimal schedule is (1, 4, 5), (4, 7, 5), and (7, 9, 4), for total priority 14.
Input: ([],)
Expected Output: 0
Explanation: There are no meetings to schedule.
Hints
- Sort meetings by end time, then decide whether to take or skip each meeting.
- For each meeting, use binary search to find the latest previous meeting that ends at or before this meeting starts.
Part 2: Robot Room Cleaning on an Unknown Grid
A robot starts on an empty cell in a finite 2D room. Some cells are blocked. The robot initially faces up and can only use four operations: move forward if possible, turn left, turn right, and clean the current cell. The robot does not know the room layout and must build its own coordinate system relative to the starting cell. For this testable version, the solution receives a grid and a start position so a hidden robot simulator can be created. Your exploration routine should control the robot using only the robot API and return how many reachable empty cells are cleaned. Grid value 1 means empty and 0 means blocked.
Constraints
- 1 <= len(grid), len(grid[0]) <= 50
- grid is rectangular.
- grid[r][c] is either 0 for blocked or 1 for empty.
- start is inside the grid and grid[start[0]][start[1]] == 1.
- The number of reachable empty cells is at most 200.
- The exploration must terminate after all reachable empty cells are cleaned.
Examples
Input: ([[1]], (0, 0))
Expected Output: 1
Explanation: The robot starts in the only empty cell, so it cleans exactly one cell.
Input: ([[1, 1, 1], [1, 0, 1], [1, 1, 1]], (0, 0))
Expected Output: 8
Explanation: All empty cells around the center obstacle are reachable.
Input: ([[1, 0, 1], [1, 0, 1], [1, 0, 1]], (0, 0))
Expected Output: 3
Explanation: Only the left column is reachable from the start; the right column is separated by blocked cells.
Input: ([[0, 1, 1, 0], [1, 1, 0, 1], [0, 1, 1, 1]], (1, 1))
Expected Output: 8
Explanation: The robot must backtrack through the connected component to clean all 8 reachable empty cells.
Hints
- Treat the starting cell as coordinate (0, 0), and use DFS over relative coordinates.
- After moving into a neighbor and finishing its DFS, move backward by turning 180 degrees, moving once, then turning 180 degrees again to restore orientation.