堆栈板:破解编码面试

时间:2018-06-12 08:43:24

标签: stack

堆叠板:想象一下(文字)堆板。如果堆栈太高,它可能会倒塌 因此,在现实生活中,当前一个堆栈超过某个阈值时,我们可能会启动一个新堆栈。实现模仿这个的数据结构SetOfStacks。 SetOfStacks应该由几个堆栈组成,并且应该在前一个堆栈超过容量时创建一个新堆栈。

SetOfStacks。 push()和SetOfStacks。 pop()的行为应该与单个堆栈完全相同(也就是说,pop()应该返回与只有一个堆栈时相同的值。)
跟进了 实现一个函数 popAt(int index),它对特定的子堆执行弹出操作 流行于索引的书籍解决方案:

   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的解释v = leftShift(index + 1,false); 缺失。谁能帮帮我呢?

1 个答案:

答案 0 :(得分:0)

好吧, leftShift 函数的目标是从“索引”输入中给出的堆栈中弹出。此后,它将在其他堆栈之间进行调整。 因此,在第27行中,从指定的堆栈中弹出元素。

此后,在第32行中,它递归调用自身,此时间作为第一个参数作为下一个堆栈的索引,第二个为false。第一个参数指示在下一个递归调用中,它将使用下一个堆栈。第二个参数设置为false,表示已完成所需的操作(弹出),现在只剩下调整。

当标记 removeTop 设置为false时,该功能将按照我上面提到的进行调整。在这种情况下,不同之处在于,它从顶部的元素而不是顶部的元素中删除了下面的每个堆栈。这样就完成了所需的调整。 术语“调整”是指每次都需要从下一个堆栈移动到上一个堆栈以填充任何空白的元素。

希望对您有帮助。

相关问题