标签:
问题描述:
定义栈的数据结构,要求添加一个min 函数,能够得到栈的最小元素。
要求函数min、push 以及pop 的时间复杂度都是O(1)。
双倍空间实现:
保存2个栈,分别是元素和当前最小值。
压缩空间实现:
?
代码实现:
package oschina.mianshi; /** * @project: oschina * @filename: IT2.java * @version: 0.10 * @author: JM Han * @date: 17:08 2015/10/20 * @comment: Test Purpose * @result: */ import java.util.Stack; import static tool.util.*; class MinStack{ Stack<Integer> stacks, mins; MinStack(){ stacks = new Stack<Integer>(); mins = new Stack<Integer>(); } void push(Integer x){ stacks.push(x); //用<= 而不是<是为了重复元素 if(mins.isEmpty() || x <= mins.peek()) mins.push(x); } void pop(){ Integer x = stacks.pop(); if(x == mins.peek()) mins.pop(); } Integer peek(){ return stacks.peek(); } Integer getMin(){ return mins.peek(); } } public class IT2 { public static void main(String[] args) { MinStack minStack = new MinStack(); minStack.push(6); minStack.push(2); minStack.push(3); minStack.push(1); minStack.push(1); minStack.push(5); minStack.push(8); System.out.println("min value: " + minStack.getMin()); minStack.pop(); minStack.pop(); minStack.pop(); minStack.pop(); System.out.println("min value: " + minStack.getMin()); } }
输出:
min value: 1 min value: 2
标签:
原文地址:http://my.oschina.net/jimmyhan/blog/519467