Повторяющийся элемент в верхней части стека на основе их второго появления

#python #algorithm #data-structures #stack

#python #алгоритм #структуры данных #стек

Вопрос:

У меня есть массив, который состоит из повторяющихся элементов, например

 arr = [1, 2, 3, 0, 2, 1]
 

Теперь я хочу хранить элементы в стеке таким образом, чтобы верхняя часть стека всегда давала мне элемент, который повторяется, и он появляется перед всеми другими повторяющимися элементами, которые появляются впоследствии.
например,

 arr = [1, 2, 3, 0, 2, 1, 3]
stack = [3, 1, 2]
 

Здесь 1,2 и 3 являются повторяющимися элементами, а 2 появляются перед всеми другими повторяющимися элементами, поэтому он находится на вершине стека, затем 1, который предшествует 3, и, наконец, 3

другой пример

 arr = [1,2,0,2,3,0,1]
stack = [1, 0, 2]
 

вы можете предположить, что элементы повторяются только дважды.

Комментарии:

1. как вы пытались это решить? где вы застряли?

Ответ №1:

Вы могли бы отслеживать все уникальные элементы, которые можно добавить в стек:

 arr = [1, 2, 0, 2, 3, 0, 1]
unique = []
stack = []

for a in arr:
    if a not in unique:
        unique.append(a)
    else:
        stack.insert(0, a)
print(stack)
 

Out:

 [1, 0, 2]
 

Ответ №2:

Я вижу такой алгоритм:

 1. Find repeated elements
2. Iterate the initial list from the tail to the head
    2.1. Check if an element is in the repeated elements list
        2.1.1 If yes -> add this item to the new list
    2.2 break when len(newlist) == len(repeated_list)