Giả sử chúng ta có danh sách các khoảng thời gian intervals dạng [start, end) và danh sách chuỗi types. Với mỗi i, intervals[i] cho biết thời gian làm việc trên loại tác vụ types[i]. Hai khoảng cùng loại không bao giờ giao nhau. Cần tìm danh sách hợp nhất và sắp xếp, mỗi mục dạng [start, end, num_types] cho biết từ start đến end có num_types tác vụ đang được thực hiện.
Ví dụ: intervals = [[0, 3], [5, 7], [0, 7]], types = ["problem solving", "news", "game play"]. Kết quả: [[0, 3, 2], [3, 5, 1], [5, 7, 2]].
Quy trình giải quyết
- Tạo danh sách sự kiện
ev: với mỗi khoảng(s, e)thêm(s, 1)và(e, -1). - Sắp xếp
ev. - Duyệt qua các sự kiện, giữ biến
cntđếm số tác vụ đang hoạt động vàlastthời điểm trước. - Khi
t != lastvàcnt != 0, thêm đoạn[last, t, cnt]vào kết quả. - Cập nhật
cnt += inc,last = t.
Ví dụ mã nguồn
class Solution:
def solve(self, intervals, jobs):
ev = []
for s, e in intervals:
ev.append((s, 1))
ev.append((e, -1))
ev.sort()
cnt = 0
last = -1
ans = []
for t, inc in ev:
if t != last and cnt != 0:
ans.append([last, t, cnt])
cnt += inc
last = t
return ans
ob = Solution()
intervals = [[0, 3], [5, 7], [0, 7]]
types = ["problem solving", "news", "game play"]
print(ob.solve(intervals, types))
# Output: [[0, 3, 2], [3, 5, 1], [5, 7, 2]]
Đầu vào
[[0, 3], [5, 7], [0, 7]], ["problem solving", "news", "game play"]
Đầu ra
[[0, 3, 2], [3, 5, 1], [5, 7, 2]]