Đây là một câu hỏi về bài tập về nhà, tôi đã suy nghĩ về nó một thời gian, và đã đưa ra một vài giải pháp nhưng tôi nghĩ một số khác tốt hơn.Xác định nếu một số chỉ xuất hiện một lần trong một mảng
Cách nhanh nhất để xác định xem có phần tử (int) trong mảng chỉ xuất hiện một lần không? Bất kỳ phần tử nào cũng có thể xuất hiện bất kỳ số lần nào. {3, 1, 4, 1, 4, 3} sẽ trả về false trong khi {3, 1, 4, 1, 4, 1} sẽ trả về true (3 xuất hiện một lần).
Chúng tôi chỉ được phép sử dụng những thứ chúng tôi đã học (tất cả các khái niệm cơ bản, đệ quy, oop, tìm kiếm và sắp xếp các thuật toán, bao gồm cả quicksort) để tạo bảng băm không phải là một tùy chọn.
Cho đến nay giải pháp thực tế tốt nhất mà tôi đưa ra là phân loại nó bằng cách sử dụng quicksort rồi đi qua nó (O (nlogn)), giải pháp không thực tế tốt nhất mà tôi đưa ra là tạo một mảng lớn kích thước của tất cả các giá trị int có thể và sau đó sử dụng vị trí của nó tương tự như bảng băm (nhưng mảng đó quá lớn để thực hiện) (O (n))
Có cách nào khác (thực tế) để thực hiện điều này trong thời gian O (n) không?
EDIT: vừa nhận được câu trả lời từ TA, giải pháp O (n) được đề xuất mà tôi nghe nói là một giải pháp không thực tế (giống hoặc tương tự với những gì tôi đề xuất) và do đó họ bảo chúng tôi không sử dụng. Tôi chắc chắn 99% rằng câu trả lời thực tế tốt nhất (không có bảng băm) là thời gian O (nlogn).
Bạn có thể tạo Bản đồ, trong đó khóa sẽ là số trong mảng và bạn sẽ tăng giá trị cho mỗi lần xuất hiện trong mảng. Sau đó, tìm hiểu tất cả các khóa, trong đó giá trị là 1. –
NeplatnyUdaj
+1 Để xem nhanh. – Alexey
@NeplatnyUdaj OP: "tạo bảng băm không phải là tùy chọn" –