Как найти первый общий случай в двух стеках?

Я думаю, что лучший способ - это просто вытолкнуть элемент из первого стека, хэшировать его, а затем посмотреть, есть ли на карте тот же элемент во втором стеке, когда выскочил Это правильный путь?

Пример:

stack1 = [1, 3, 4, 1, 2] 

stack2 = [8, 7, 3, 0]

первым распространенным явлением будет 3.

РЕДАКТИРОВАТЬ: я собираюсь хешировать stack1, а затем сравнить каждый элемент в stack2 с этим хешем. Спасибо!

1 ответ

Решение

Вы можете использовать массив boolean который будет представлять все цифры, каждый раз извлекается из одного из стеков, проверяет, встречалась ли соответствующая цифра, если она была найдена, если не установлена ​​в значение true:

boolean[] digits = new boolean[10];
int digit = stack1.pop();
if (digits[digit]) {
    // found the digit do something with it
} else {
    digits[digit] = true;
}

Теперь сделайте то же самое с stack2 и цикл, пока вы не нашли его или больше не нужно ничего всплывать.

Другие вопросы по тегам