Vì vậy, tôi đã tìm thấy câu hỏi về thuật toán phỏng vấn Google trực tuyến này. Nó thực sự thú vị và tôi vẫn chưa đưa ra một giải pháp tốt. Xin vui lòng có một cái nhìn, và cho tôi một gợi ý/giải pháp, nó sẽ là tuyệt vời nếu bạn có thể viết mã trong Java :).Một thuật toán phỏng vấn thú vị của Google mà tôi tìm thấy trực tuyến yêu cầu thời gian tuyến tính
"Thiết kế một thuật toán, được đưa ra danh sách gồm n phần tử trong một mảng, tìm tất cả các phần tử xuất hiện nhiều hơn n/3 lần trong danh sách Thuật toán sẽ chạy trong thời gian tuyến tính. (N> = 0) Bạn đang dự kiến sẽ sử dụng sự so sánh và đạt được thời gian tuyến tính không băm/không gian quá mức/và không sử dụng tiêu chuẩn thời gian tuyến tính lựa chọn xác định algo"
'và không sử dụng lựa chọn xác định thời gian tuyến tính chuẩn algo' nói gì ??? –
Tôi tò mò muốn biết làm thế nào người ta sẽ làm điều này mà không băm. Mặc dù một 'int []' được tính là băm. Nó def được tính là không gian quá mức. –
Tôi không thể nghĩ ra giải pháp chính xác nào, nhưng tôi tin rằng có một vấn đề nổi tiếng hơn là tìm tất cả các phần tử xuất hiện nhiều hơn n/2 lần bằng cách lặp qua mảng và sử dụng mẹo để tìm nhiều nhất yếu tố phổ biến sau đó tìm kiếm thông qua mảng một lần nữa để kiểm tra xem nó có xuất hiện đủ thời gian hay không.Nếu bạn lặp lại quy trình đó và bỏ qua phần tử phổ biến nhất, nó sẽ giải quyết vấn đề này vì có tối đa 2 phần tử xuất hiện nhiều hơn n/3 lần – pasha