Otrzymałem tablicę (z n elementów) i muszę znaleźć najmniejszy element po prawej stronie każdego elementu, który jest większy od niego (bieżący element).Największy element obecny po prawej stronie każdego elementu w tablicy
For example :
Array = {8,20,9,6,15,31}
Output Array = {9,31,15,15,31,-1}
Czy można to rozwiązać w O(n)
.? Pomyślałem o przejściu tablicy od prawej strony (zaczynając od n-2) i budowaniu drzewa binarnego wyszukiwania balansu dla pozostałych elementów, ponieważ wyszukiwanie w nim elementu, który jest natychmiast większy niż bieżący element, byłoby O (logn).
Stąd czas złożoność wyjdzie być O (n * (log (n)).
Czy istnieje lepsze podejście do tego problemu?
To nie jest równoznaczne z sortowaniem, znalezienie lokalizacji dowolnego elementu 'a' jest tym, co robisz w quicksort w każdym kroku, i odbywa się tam w O (n). A może źle zrozumiałem twoją redukcję z sortowania? – amit
Wygląda dobrze dla mnie, przynajmniej do sortowania różnych liczb (co jestem prawie pewien, że wystarczy - nie wiem). @amit: po uruchomieniu algorytmu 'v' i' reverse (v) ', dla każdego elementu znasz indeks elementu, który powinien pojawić się po jego prawej stronie (jest to albo następny najmniejszy element po prawej, albo następny najmniejszy element po lewej stronie). Z każdego elementu początkowego można zbudować część rozwiązania o indeksie> = i w czasie O (1) na element. Przerzucenie znaku i jego powtórzenie spowoduje wyświetlenie części po lewej stronie (tj. O indeksie <= i). –
Rozumiem, że otrzymujesz * pojedyncze * położenie elementu, co jest możliwe do wykonania w O (n). dzięki za wytłumaczenie. – amit