Tôi đã phỏng vấn với Amazon cách đây vài ngày. Tôi không thể trả lời một trong những câu hỏi đã yêu cầu tôi hài lòng. Tôi đã cố gắng để có được câu trả lời sau cuộc phỏng vấn nhưng tôi đã không thành công cho đến nay. Đây là câu hỏi:Giá trị tối thiểu của các giá trị tối đa trong các phân đoạn phụ ... trong độ phức tạp O (n)
Bạn có một mảng các số nguyên có kích thước n. Bạn được cung cấp thông số k
trong đó k < n
. Đối với mỗi phân đoạn các phần tử liên tiếp có kích thước k
trong mảng bạn cần để tính toán giá trị lớn nhất. Bạn chỉ cần trả lại giá trị tối thiểu của các giá trị tối đa này.
Ví dụ: 1 2 3 1 1 2 1 1 1
và k = 3
câu trả lời là 1
.
Các phân đoạn sẽ là 1 2 3
, 2 3 1
, 3 1 1
, 1 1 2
, 1 2 1
, 2 1 1
, 1 1 1
.
Giá trị tối đa trong mỗi phân đoạn là 3
, 3
, 3
, 2
, 2
, 2
, 1
.
Giá trị tối thiểu của các giá trị này là 1
do đó câu trả lời là 1
.
Câu trả lời hay nhất tôi đưa ra là độ phức tạp O (n log k). Những gì tôi làm là tạo một cây tìm kiếm nhị phân với các thành phần k
đầu tiên, nhận giá trị tối đa trong cây và lưu nó trong biến minOfMax
, sau đó lặp lại một phần tử tại một thời điểm với các phần tử còn lại trong mảng, xóa phần tử đầu tiên trong đoạn trước đó từ cây tìm kiếm nhị phân, chèn phần tử cuối cùng của phân đoạn mới vào cây, lấy phần tử tối đa trong cây và so sánh nó với minOfMax
để lại trong minOfMax
giá trị nhỏ nhất của hai.
Câu trả lời lý tưởng cần phải phức tạp O (n). Cảm ơn bạn.
Giải pháp tốt, nhưng câu hỏi phỏng vấn khủng khiếp. Hoặc bạn đã quen thuộc với cấu trúc dữ liệu này, và vấn đề là tầm thường; hoặc bạn không, và vấn đề là không thể. (Trừ khi bạn muốn giả vờ bạn đã đưa ra nó trong cuộc phỏng vấn?) Tôi tự hỏi liệu có một cách tiếp cận trực tiếp hơn, hoặc nếu đây chỉ là một câu hỏi phỏng vấn crappy. – Nemo
@ Nemo- Tôi chỉ biết cách giải quyết điều này vì tôi biết về cấu trúc dữ liệu hàng đợi, mà tôi chỉ biết vì tôi đã dành bốn giờ cố gắng tìm ra cách để thực hiện nó trước khi thấy việc triển khai hai ngăn xếp dựa trên min-stack, mà chính nó là một câu hỏi phỏng vấn khó. Tôi nghĩ rằng có thể có một cách dễ dàng hơn để giải quyết vấn đề này, nhưng thành thật mà nói, tôi không biết cách tiếp cận vấn đề này bằng bất kỳ cách nào khác. – templatetypedef
Tôi đã nghĩ về nó một chút, và tôi cũng không thấy nó. Thực tế là bạn chỉ muốn một giá trị ở cuối (thậm chí không vị trí của nó) là trêu ngươi, nhưng tôi chỉ không thấy cách khai thác nó. – Nemo