1386. Cinema Seat Allocation
Description
A cinema has n rows of seats, numbered from 1 to n. Each row has 10 seats, numbered from 1 to 10.
You are given a 2D integer array reservedSeats, where reservedSeats[i] = [rowi, seati] means that seat seati in row rowi is already reserved.
A four-person group must be assigned to four seats in the same row. The group can be seated in one of the following seat blocks:
- seats
2, 3, 4, 5 - seats
4, 5, 6, 7 - seats
6, 7, 8, 9
A block can be used only if none of its seats are reserved. Each seat can be assigned to at most one group.
Return an integer denoting the maximum number of four-person groups that can be assigned.
Β
Example 1:
Input: n = 3, reservedSeats = [[1,2],[1,3],[1,8],[2,6],[3,1],[3,10]] Output: 4 Explanation: The figure above shows an optimal allocation of four groups. Seats marked in blue are already reserved, and each set of four contiguous seats marked in orange is assigned to one group.
Example 2:
Input: n = 2, reservedSeats = [[2,1],[1,8],[2,6]] Output: 2
Example 3:
Input: n = 4, reservedSeats = [[4,3],[1,4],[4,6],[1,7]] Output: 4
Β
Constraints:
1 <= n <= 1091 <= reservedSeats.length <= min(10 * n, 104)reservedSeats[i] == [rowi, seati]1 <= rowi <= n1 <= seati <= 10- All
reservedSeats[i]are distinct.
Solutions
Solution 1: Hash Table + Bit Manipulation
We use a hash table \(d\) to store all the reserved seats, where the key is the row number, and the value is the state of the reserved seats in that row, i.e., a binary number. The \(j\)-th bit being \(1\) means the \(j\)-th seat is reserved, and \(0\) means the \(j\)-th seat is not reserved.
We traverse \(reservedSeats\), for each seat \((i, j)\), we add the state of the \(j\)-th seat (corresponding to the \(10-j\) bit in the lower bits) to \(d[i]\).
For rows that do not appear in the hash table \(d\), we can arrange \(2\) families arbitrarily, so the initial answer is \((n - len(d)) \times 2\).
Next, we traverse the state of each row in the hash table. For each row, we try to arrange the situations \(1234, 5678, 3456\) in turn. If a situation can be arranged, we add \(1\) to the answer.
After the traversal, we get the final answer.
The time complexity is \(O(m)\), and the space complexity is \(O(m)\). Where \(m\) is the length of \(reservedSeats\).
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |

