Hãy sử dụng + để biểu thị sự bắt đầu của một phân khúc và -để biểu thị sự kết thúc. Đối với mỗi phân đoạn, tạo hai cặp, một cặp cho mỗi điểm cuối:
Segment1: (-2, +), (3, -)
Segment2: (1, +), (5, -)
Segment3: (-3, +), (1, -)
Sắp xếp 2 Ncác cặp theo tọa độ đầu tiên của chúng (trong trường hợp bằng nhau, đặt + trước -). Bạn có thể làm điều này trong thời gianÔ ( Nđăng nhậpN) với bất kỳ thuật toán sắp xếp hợp lý, hoặc trong thời gian Ô ( N+ K)sử dụng tính năng lập chỉ mục chính . Trong ví dụ này, chúng tôi nhận được:
(-3, +)
(-2, +)
(1, +)
(1, -)
(3, -)
(5, -)
Bây giờ xử lý các điểm cuối theo thứ tự. Duy trì số lượng phân đoạn hoạt động, ban đầu là 0. Mỗi khi bạn xử lý một+, tăng số lượng lên 1. Mỗi khi bạn xử lý một -, giảm số đếm đi 1. Sau khi xử lý từng điểm cuối, kiểm tra xem số đếm mới có cao hơn số đếm lớn nhất cho đến nay không; nếu có, hãy cập nhật giải pháp của bạn.
(-3, +) -> count=1, max_count=0, sol=-3
(-2, +) -> count=2, max_count=1, sol=-2
(1, +) -> count=3, max_count=2, sol=1
(1, -) -> count=2, max_count=3, sol=1
(3, -) -> count=1, max_count=3, sol=1
(5, -) -> count=0, max_count=3, sol=1
Giai đoạn thứ hai của thuật toán này mất thời gian tỷ lệ thuận N. Toàn bộ thuật toán cần có thời gianÔ ( Nđăng nhậpN) với một loại chung, hoặc Ô ( N+ K) với tính năng lập chỉ mục chính.