package com.sprint.datastructure; import java.util.Stack; import java.util.EmptyStackException; /** * 设计一个栈,支持栈的push和pop操作,以及第三种操作findMin, 它返回改数据结构中的最小元素 * finMin操作最坏的情形下时间复杂度应该是O(1) , 简单来讲,操作一次就可以得到最小值 * */ public class QuickMinStack { Stack<Integer> stack = new Stack<>(); int minValue; public void push(int data){ if (isEmpty()) { minValue = data; } if (minValue > data) { minValue = data; } stack.push(data); } public int pop(){ if (isEmpty()) { throw new EmptyStackException(); } int top = stack.pop(); if (top == minValue && !isEmpty()) { minValue = getMinValue(stack); } return top; } public int findMin(){ return minValue; } private boolean isEmpty() { return stack.size() == 0; } private int getMinValue(Stack<Integer> stack) { Stack<Integer> stack1 = stack; int min = stack1.pop(); while (!isEmpty()) { int value = stack1.pop(); if (min > value) { min = value; } } return min; } }