Giả sử chúng ta có một danh sách các khoảng đã đóng và một danh sách các khoảng khác. Riêng lẻ, mỗi danh sách không chồng chéo và chúng được sắp xếp theo thứ tự không giảm dần. Chúng ta phải tìm sự trùng lặp của hai khoảng được sắp xếp theo thứ tự không giảm.
Vì vậy, nếu đầu vào giống như inv1 =[[50, 100], [190, 270], [310, 330]] inv2 =[[40, 120], [180, 190]], thì đầu ra sẽ là [ [50, 100], [190, 190]]
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- ans:=một danh sách mới
- i:=0, j:=0
- while i
- nếu start <=end, thì
- chèn khoảng thời gian [bắt đầu, kết thúc] vào ans
- nếu A [i, 1]
- i:=i + 1
- nếu start <=end, thì
- j:=j + 1
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
class Solution: def solve(self, A, B): ans = [] i = 0 j = 0 while i < len(A) and j < len(B): start = max(A[i][0], B[j][0]) end = min(A[i][1], B[j][1]) if start <= end: ans.append([start, end]) if A[i][1] < B[j][1]: i += 1 else: j += 1 return ans ob = Solution() inv1 = [[50, 100],[190, 270],[310, 330]] inv2 = [[40, 120],[180, 190]] print(ob.solve(inv1, inv2))
Đầu vào
[[50, 100],[190, 270],[310, 330]], [[40, 120],[180, 190]]
Đầu ra
[[50, 100], [190, 190]]