Jeżeli są mniejsze jeszcze nienapotkane liczby idziemy dalej, bo nie będzie to najdalszy sąsiad
Jeżeli nie ma już mniejszych nienapotkanych liczb to wiemy że jest to najdalszy mniejszy sąsiad dla samej siebie oraz każdej już napotkanej liczby większej od siebie
Powyższy algorytm napisany w Pythonie:
def algo(A):
m = 1
pozycja = [0] * n
najd_prawy = [0] * n
for i in range(1, len(A)+1):
pozycja[A[i-1]-1] = i
while (m <= n) and (pozycja[m-1] != 0):
najd_prawy[pozycja[m-1]-1] = i
m = m + 1
Algorytm jest liniowy, ponieważ:
- Pętla for zawsze wykona się n razy.
- Pętla while wykonuje się tak długo jak m <= n, a w środku za każdym razem m jest zwiększane o 1, więc ta pętla też może się wykonać co najwyżej n razy.