Tôi đang cố gắng để giải quyết vấn đề đường chân trời nổi tiếng (xem gif):Merge nền trời xa, chia để trị
Input
(1,11,5), (2,6, 7), (3,13,9), (12,7,16), (14,3,25), (19,18,22), (23,13,29), (24,4,28)
Nên quay lại, các điểm phía sau các tòa nhà khác sẽ biến mất và tọa độ thay đổi trong trục Y phải ở đường chân trời trở về:
(1, 11), (3, 13), (9, 0), (12, 7), (16, 3), (19, 18), (22, 3), (23 , 13), (29, 0)
Tôi đang cố gắng làm như vậy bằng cách sử dụng cách tiếp cận phân chia và chinh phục thuật toán để đạt được thời gian chạy O (n lg n), nhưng tôi bị kẹt trên phần hợp nhất.
Mỗi lần tôi nghĩ về điều đó, tôi bị lẫn lộn. Ví dụ: tôi kiểm tra xem đường chân trời nào là đầu tiên, ví dụ: trong đó có tọa độ x thấp hơn, sau đó tôi thêm + điểm cao của nó vào đường chân trời mới của tôi. Nhưng sau đó tôi gặp một đường chân trời đằng sau hai đường chân trời khác, làm sao tôi có thể phát hiện 'va chạm' này?
Trước tiên, tôi có kiểm tra xem các đường chân trời có bất kỳ trùng lặp nào hay không bằng cách kiểm tra xem còn lại.x2 < right.x1 không? Nhưng sau đó tôi nghĩ tôi nên kiểm tra cái gì trước? Chồng chéo ưu tiên trên trục x và mọi thứ biến thành một mớ hỗn độn trứng gà lớn.
Có lẽ tôi đang suy nghĩ quá phức tạp? Những gì tôi cần là tập hợp các tọa độ y cao nhất, tại mọi giao lộ, tôi có nên tiếp cận nó như thế này không?
Hãy để tôi xem Nếu tôi hiểu chính xác, bằng cách chia x-tọa độ bạn có nghĩa là, ví dụ, (2, 4, 8) -> (2, 4), (8, 0), phải không? – Oxymoron
Xin lỗi, tôi không rõ ràng về ý nghĩa của các từ 'hình chữ nhật hiện tại'. Chỉ cần một danh sách các hình chữ nhật ban đầu? – Oxymoron
Tôi xin lỗi, có lẽ tôi quá ngu ngốc cho việc này, nhưng tôi vẫn không hiểu. Bất cứ khi nào bắt đầu gặp phải: thêm nó vào tập hợp các hình chữ nhật, nhưng chúng tôi chỉ thiết lập rằng các cấu trúc này không phải là hình chữ nhật – Oxymoron