How to find the next smaller element for each element in a list with Python

1 Answer

0 votes
def find_next_smaller_elements(lst):
    smaller_elements = [-1 for x in lst] # if not found write -1

    stack = []
    for i, x in enumerate(lst):
        while len(stack) > 0 and x < lst[stack[-1]]:
            smaller_elements[stack.pop()] = x
          
        stack.append(i)
        
    return smaller_elements
    
    
print(find_next_smaller_elements([5, 8, 2, 7, 4, 8, 1, 3]))



'''
run:

[2, 2, 1, 4, 1, 1, -1, -1]

'''

 



answered Nov 25, 2021 by avibootz
...