package com.coding.basic.stack; import java.util.Stack; /** * 设计一个栈,支持栈的push和pop操作,以及第三种操作findMin, 它返回改数据结构中的最小元素 * finMin操作最坏的情形下时间复杂度应该是O(1) , 简单来讲,操作一次就可以得到最小值 * @author kai * */ public class QuickMinStack { class Node { private int min; private int data; public Node(int data){ this.min = 0; this.data = data; } } Stack<Node> stack = new Stack<>(); public void push(int data){ Node node = new Node(data); if(stack.isEmpty()){ node.min = data; } else { if(data < stack.peek().min){ node.min = data; } else { node.min = stack.peek().min; } } stack.push(node); } public int pop(){ return stack.pop().data; } public int findMin(){ return stack.peek().min; } public static void main(String[] args){ QuickMinStack stack = new QuickMinStack(); stack.push(5); stack.push(7); System.out.println(stack.findMin()); stack.push(4); System.out.println(stack.findMin()); stack.pop(); System.out.println(stack.findMin()); stack.push(3); System.out.println(stack.findMin()); } }