Предположим, ваш ввод имеет вид 1..N.
Затем ваш код выполнит N итераций, каждую из которых он потенциально проверяет по всей длине списка, чтобы увидеть, присутствует ли в списке текущее значение j. N итераций проверки всего списка длины N дает N * N = N ^ 2.
Это пример наихудшего случая, но мы не знаем, каким должен быть типичный ввод. Может быть, вы это знаете, а может и нет. Простой и оптимальный в худшем случае способ сделать это - отсортировать список, а затем найти первый «пробел» между элементами в вашем списке. Как то так:
def my_search(A):
A = [i for i in sorted(A) if i > 0] # Gets rid of <1 values as well
min_pos_val = 1
for val in A:
if val > min_pos_val:
return min_pos_val
min_pos_val += 1
return min_pos_val