Find the nth most frequent number in array.
(There is no limit on the range of the numbers)
Tôi nghĩ rằng chúng ta có thểTìm số N-thứ thường gặp nhất trong mảng
(i) lưu trữ sự xuất hiện của tất cả các yếu tố sử dụng bản đồ trong C++
(ii) xây dựng một Max-đống trong thời gian tuyến tính của các lần xuất hiện (hoặc tần số) của phần tử và sau đó trích xuất tối đa phần tử thứ N, Mỗi lần khai thác mất thời gian log (n) để heapify.
(iii), chúng tôi sẽ nhận được tần số của N-thứ số thường gặp nhất
(iv) sau đó chúng ta có thể tuyến tính tìm kiếm thông qua các băm để tìm các phần tử có tần số này.
Time - O (NlogN) Space - O (N)
Có phương pháp nào tốt hơn?
Xem [Lựa chọn thuật toán] (http://en.wikipedia.org/wiki/ Selection_algorithm) cho phép chọn phần tử thứ N và mảng không có thứ tự trong O (N). – salva
@salva - Câu hỏi đặt ra là chọn số FREQUENCY số thứ nhất và không phải là phần tử thứ n. – user754657
@ user754657: có, bước * i * vẫn được yêu cầu, nhưng sau đó các bước * ii *, * iii * và * iv * có thể được thay thế bằng thuật toán chọn là O (N), dẫn đến giải pháp là O (N) trên toàn cầu. – salva