Стек тарелок: взломать интервью - PullRequest
0 голосов
/ 12 июня 2018

Стек тарелок. Представьте (буквальную) стопку тарелок.Если стек становится слишком высоким, он может упасть.
Поэтому в реальной жизни мы, вероятно, запустим новый стек, когда предыдущий стек превысит некоторый порог.Реализуйте структуру данных SetOfStacks, которая имитирует это.SetOfStacks должен состоять из нескольких стеков и должен создавать новый стек, когда предыдущий превышает емкость.

SetOfStacks.push () и SetOfStacks.pop () должен вести себя идентично одному стеку (то есть pop () должен возвращать те же значения, что и при наличии только одного стека).
FOLLOW UP
Реализация функции popAt (int index) , который выполняет операцию pop для определенного подстека.
Книжное решение для pop по индексу:

   public int popAt(int index) {
21 return leftShift (index, true);
22 }
23
24 public int leftShift(int index, boolean removeTop) {
25 Stack stack = stacks.get(index);
26 int removed_item;
27 if (removeTop) removed_item = stack.pop();
28 else removed_item = stack.removeBottom( );
29 if (stack.isEmpty(» {
30 stacks.remove(index);
31 } else if (stacks.size() > index + 1) {
32 int v = leftShift(index + 1, false);
33 stack . push(v);
34 }
35 return removed_item;
36 } 

объяснение строки 32 i nt v = leftShift (индекс + 1, ложь); отсутствует.Может кто-нибудь помочь мне с этим?

1 Ответ

0 голосов
/ 31 августа 2019

Ну, цель функции leftShift состоит в том, чтобы выскочить из стека, заданного на входе "index".После этого он выполняет настройку между другими стеками.Итак, в строке 27 выскакивает элемент из указанного стека.

После этого в строке 32 он рекурсивно вызывает себя, давая этому времени в качестве первого аргумента индекс следующего стека и в качестве второго false,Первый аргумент указывает, что при следующем рекурсивном вызове он будет использовать следующий стек.Второй аргумент, установленный как false, означает, что требуемое действие (pop) выполнено, и теперь остается только корректировка.

Функция, когда флаг removeTop установлен как ложный, выполняет настройку, как я упоминал выше.Разница в этом случае заключается в том, что вместо верхнего элемента он удаляет нижний из каждого из следующих стеков.Таким образом, необходимые настройки сделаны.Под термином корректировка я подразумеваю элементы, которые необходимо каждый раз перемещать из следующих стеков в предыдущие, чтобы заполнить все пустые места.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...