【问题标题】:Stack of Plates: Cracking the coding interviewStack of Plates:破解编码面试
【发布时间】:2018-11-21 14:20:14
【问题描述】:

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

SetOfStacks。 push() 和 SetOfStacks。 pop() 的行为应该与单个堆栈相同(也就是说,pop() 应该返回与只有一个堆栈时相同的值)。
跟进
实现一个函数 popAt (int index),它在特定子堆栈上执行弹出操作。
pop at 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 i nt v = leftShift(index + 1, false); 行的解释缺失。谁能帮我解决这个问题?

【问题讨论】:

    标签: stack


    【解决方案1】:

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

    在这之后,在第 32 行,它递归地调用自己,将这个时间作为第一个参数给出下一个堆栈的索引,并作为第二个 false。第一个参数表示在下一次递归调用中,它将使用下一个堆栈。第二个参数设置为 false,表示所需的操作(pop)已经完成,现在只剩下调整了。

    removeTop 标志设置为 false 时的函数执行我上面提到的调整。在这种情况下,不同之处在于它从以下每个堆栈中删除底部元素,而不是顶部元素。这样就完成了所需的调整。 术语调整,我的意思是每次都需要从下一个堆栈移动到前一个堆栈以填充任何空白空间的元素。

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2013-09-05
      • 2015-12-06
      • 2015-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-24
      相关资源
      最近更新 更多