Поиск всех элементов в массиве по заданному условию
Дан массив целых чисел. Вывести все числа для которых разность между этим числом по абсолютной величине и всеми левостоящими часлами большее заданной величины 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