栈和队列----设计一个有getMin功能的栈
设计一个有getMin功能的栈
设计一个具有getMin功能的栈,可以返回栈中的最小的元素,可以使用现有的栈的数据结构,要求pop/push/getMin操作的时间复杂度是O(1)。
package com.test; import java.util.Stack; /** * Created by Demrystv. */ public class GetMinStack { //定义两个栈,一个存放正常的数据,一个存放最小值 Stack<Integer> stackData = new Stack<Integer>(); Stack<Integer> stackMin = new Stack<Integer>(); //在入栈时,如果stackMin是空,同步压入, //如果不是空,但是新元素小于等于stackMin的栈顶元素,也同步压入 //如果不是空,新元素大于stackMin的栈顶元素,就不压入 stackMin //这样就可以保证stackMIn中的元素依次减少 public void push(int newNum){ if(stackMin.isEmpty()){ stackMin.push(newNum); }else if (newNum<=stackMin.peek()){ stackMin.push(newNum); } stackData.push(newNum); } //出栈和入栈是相对应的 //stackData中的栈顶元素只会大于等于stackMin栈顶元素 //如果大于,只弹出stackData的栈顶元素,如果等于,两个的栈顶元素都要弹出 public int pop(){ if(stackData.isEmpty()){ throw new RuntimeException("Your stack is empty."); } int value = stackData.pop(); if(value==stackMin.peek()){ stackMin.pop(); } return value; } public int getMin(){ if(stackMin.isEmpty()){ throw new RuntimeException("Your stack is empty."); } return stackMin.peek(); } }