Mô tả bài toán
Cho danh sách các khoảng thời gian chiếu phim (có thể chồng chéo). Tìm số rạp chiếu tối thiểu để chiếu hết tất cả các suất.
Ví dụ: intervals = [[20, 65], [0, 40], [50, 140]] → đầu ra 2 (suất [20,65] chồng với [0,40] và [50,140], nhưng [0,40] và [50,140] không chồng).
Giải thuật (Sweep Line)
- Tạo danh sách sự kiện
t: với mỗi khoảng[a, b]thêm(a, 1)(bắt đầu) và(b, -1)(kết thúc). - Sắp xếp
ttheo thời gian. - Duyệt qua các sự kiện, giữ biến
count(số phim đang chiếu) vàans(max củacount). - Trả về
ans.
Ví dụ mã Python
class Solution:
def solve(self, intervals):
t = []
for a, b in intervals:
t.append((a, 1))
t.append((b, -1))
ans = count = 0
for x, d in sorted(t):
count += d
ans = max(ans, count)
return ans
ob = Solution()
intervals = [[20, 65], [0, 40], [50, 140]]
print(ob.solve(intervals))
Đầu vào
[[20, 65],[0, 40],[50, 140]]
Đầu ra
2