Поиск всех элементов в массиве по заданному условию

Дан массив целых чисел. Вывести все числа для которых разность между этим числом по абсолютной величине и всеми левостоящими часлами большее заданной величины eps.

К примеру. Заданн массив: [9, 7, 0, 5, 2, 4, 1, 8, 3, 6] и eps=1. Для числа с нулевым индексом всегда будет выполняться условие, так как левее него ничего нет. Следующее число для которого выполнится условие будет 7 (9-7)>eps, и тд.

Набросал такую функцию:

def extremal_min(index, eps):
    extreme_min = []
    for k in range(len(index)):
        for l in range(1, k + 1):
            if abs(index[k] - index[k - l]) <= eps:
                print(f'[{index[k]}, {index[k - l]}]', end='  ')
                print(f'--{index[k]}--', end='  ')
                break
            else:
                print(f'({index[k]}, {index[k - l]})', end='  ')
        else:
            print(f'++{index[k]}++', end='  ')
            extreme_min.append(index[k])
        print()
    return extreme_min

Получил вывод:

Здесь я обозначил ++value++ - число, для которого выполняется условие; --value-- - число, для которого не выполняется условие; в круглых скобках - пары чисел в которых разность больше eps; в квадратных - числовая пара, на которой невыполнелось условие

e=[9, 7, 0, 5, 2, 4, 1, 8, 3, 6]
eps=1
emin = extremal_min(e, eps)
print()
print(emin)


++9++  
(7, 9)  ++7++  
(0, 7)  (0, 9)  ++0++  
(5, 0)  (5, 7)  (5, 9)  ++5++  
(2, 5)  (2, 0)  (2, 7)  (2, 9)  ++2++  
(4, 2)  [4, 5]  --4--  
(1, 4)  [1, 2]  --1--  
(8, 1)  (8, 4)  (8, 2)  (8, 5)  (8, 0)  [8, 7]  --8--  
(3, 8)  (3, 1)  [3, 4]  --3--  
(6, 3)  (6, 8)  (6, 1)  (6, 4)  (6, 2)  [6, 5]  --6--  

[9, 7, 0, 5, 2] # итоговый результат

Вопрос заключается в следующем: возможно ли как-то ускорить данный алгоритм? Можно воспользоваться любыми средставми. Конечно хотелось бы получить результат за линейное время, но сомневаюсь, что это реализуемо. Приветствуется любая помощь

Функция без лишнего кода:

def extremal_min(index, eps):
    extreme_min = []
    for k in range(len(index)):
        for l in range(1, k + 1):
            if abs(index[k] - index[k - l]) <= eps:
                break
        else:
            extreme_min.append(index[k])
    return extreme_min

Ответы (0 шт):