最小栈
题目描述
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。
push(x) – 将元素 x 推入栈中。
pop() – 删除栈顶的元素。
top() – 获取栈顶元素。
getMin() – 检索栈中的最小元素。
思路
这个题主要是利用了Java中TreeSet容器的特性即没有重复元素和元素可以排列顺序。在执行push操作时一并将元素添加到TreeSet中去。当执行pop操作时,要重新将pop后的栈添加到一个新的set中。getMin是返回TreeSet的第一个元素。
题解
public class MinStack155 {
private Set<Integer> set = new TreeSet<>();
private LinkedList<Integer> minStack = new LinkedList<>();
public void push(int num){
minStack.push(num);
set.add(num);
}
public int pop(){
int popData = minStack.pop();
set = new TreeSet<>(minStack);
return popData;
}
public int top(){
return minStack.peek();
}
public Integer getMin(){
if(!set.isEmpty()){
return set.iterator().next();
}
return null;
}
public static void main(String[] args) {
MinStack155 minStack = new MinStack155();
minStack.push(-2);
minStack.push(-3);
minStack.push(0);
minStack.push(-3);
System.out.println(minStack.getMin()); //-3
System.out.println(minStack.pop()); //0
System.out.println(minStack.top()); //-3
System.out.println(minStack.getMin()); //-3
}
}
/*output
-3
-3
0
-3
*/