package com.coding.basic.stack; /** * 设计一个栈,支持栈的push和pop操作,以及第三种操作findMin, 它返回改数据结构中的最小元素 * finMin操作最坏的情形下时间复杂度应该是O(1) , 简单来讲,操作一次就可以得到最小值 * * @author liuxin * */ import java.util.Stack; public class QuickMinStack { private Stack<Integer> normalStack = new Stack<Integer>(); private Stack<Integer> minNumStack = new Stack<Integer>(); public void push(int data){ normalStack.push(data); if(minNumStack.isEmpty()){ minNumStack.push(data); } else{ if(minNumStack.peek() >= data) { minNumStack.push(data); } } } public int pop(){ if(normalStack.isEmpty()){ throw new RuntimeException("the stack is empty"); } int value = normalStack.pop(); if(value == minNumStack.peek()){ minNumStack.pop(); } return value; } public int findMin(){ return minNumStack.peek(); } }