牛客网初级班------练习2与练习3

练习2

实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返 回栈中最小元素的操作。

【要求】

1.pop、push、getMin操作的时间复杂度都是O(1)。

2.设计的栈类型可以使用现成的栈结构。

思路:
同时维护俩个栈

1)如果新增的数比min栈顶小,将该数压入min栈和data栈;如果新增的数比min栈顶大,将该数压入data栈,同时将重新压入min栈顶上的数

练习3

如何仅用队列结构实现栈结构? 如何仅用栈结构实现队列结构?

public static class MyStack1 {
   private Stack<Integer> stackData;
   private Stack<Integer> stackMin;

   public MyStack1() {
      this.stackData = new Stack<Integer>();
      this.stackMin = new Stack<Integer>();
   }

   public void push(int newNum) {
      if (this.stackMin.isEmpty()) {
         this.stackMin.push(newNum);
      } else if (newNum <= this.getmin()) {
         this.stackMin.push(newNum);
      }
      this.stackData.push(newNum);
   }

   public int pop() {
      if (this.stackData.isEmpty()) {
         throw new RuntimeException("Your stack is empty.");
      }
      int value = this.stackData.pop();
      if (value == this.getmin()) {
         this.stackMin.pop();
      }
      return value;
   }

   public int getmin() {
      if (this.stackMin.isEmpty()) {
         throw new RuntimeException("Your stack is empty.");
      }
      return this.stackMin.peek();
   }
}

public static class MyStack2 {
   private Stack<Integer> stackData;
   private Stack<Integer> stackMin;

   public MyStack2() {
      this.stackData = new Stack<Integer>();
      this.stackMin = new Stack<Integer>();
   }

   public void push(int newNum) {
      if (this.stackMin.isEmpty()) {
         this.stackMin.push(newNum);
      } else if (newNum < this.getmin()) {
         this.stackMin.push(newNum);
      } else {
         int newMin = this.stackMin.peek();
         this.stackMin.push(newMin);
      }
      this.stackData.push(newNum);
   }

   public int pop() {
      if (this.stackData.isEmpty()) {
         throw new RuntimeException("Your stack is empty.");
      }
      this.stackMin.pop();
      return this.stackData.pop();
   }

   public int getmin() {
      if (this.stackMin.isEmpty()) {
         throw new RuntimeException("Your stack is empty.");
      }
      return this.stackMin.peek();
   }
}

猜你喜欢

转载自blog.csdn.net/qq_43193797/article/details/86744903