面试题:包含min函数的栈
题目描述:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。(时间复杂度,定义一个数据类型,可以对栈的实现做出更改)
方法1:使用Iterator
import java.util.Stack; import java.util.Iterator; public class Solution { Stack<Integer> stack=new Stack<>(); public void push(int node) { stack.push(node); } public void pop() { stack.pop(); } public int top() { return stack.peek(); } public int min() { int min=stack.peek(); Iterator<Integer> ite=stack.iterator(); while(ite.hasNext()){ int temp=ite.next(); if(min>temp){ min=temp; } } return min; } }
方法2:使用辅助栈
import java.util.Stack; import java.util.Iterator; public class Solution { Stack<Integer> stack1=new Stack<>(); Stack<Integer> stack2=new Stack<>(); public void push(int node) { stack1.push(node); if(stack2.size()==0){ stack2.push(node); }else{ int temp=stack2.peek(); if(temp>node) stack2.push(node); else stack2.push(temp); } } public void pop() { stack1.pop(); stack2.pop(); } //以下两个都是用peek();不是出栈 public int top() { return stack1.peek(); } public int min() { return stack2.peek(); } }