package com.coding.basic.datastructure.stack; import java.util.Stack; /** * 设计一个栈,支持栈的push和pop操作,以及第三种操作findMin, 它返回该数据结构中的最小元素 * finMin操作最坏的情形下时间复杂度应该是O(1) , 简单来讲,操作一次就可以得到最小值 */ public class QuickMinStack<E extends Comparable> { private Stack<E> stack; private Stack<E> minStack; public QuickMinStack() { stack = new Stack<>(); minStack = new Stack<>(); } public void push(E data) { stack.push(data); if (minStack.isEmpty()) { minStack.push(data); } else { if (minStack.peek().compareTo(data) >= 0) { minStack.push(data); } } } public E pop() { E top = stack.pop(); if (top.compareTo(minStack.peek()) <= 0) { minStack.pop(); } return top; } public E findMin() { return minStack.peek(); } }