设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。
- push(x) —— 将元素 x 推入栈中。
- pop() —— 删除栈顶的元素。
- top() —— 获取栈顶元素。
- getMin()—— 检索栈中的最小元素。
package com.hc.Stack;
/*
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。
push(x) —— 将元素 x 推入栈中。
pop() —— 删除栈顶的元素。
top() —— 获取栈顶元素。
getMin() —— 检索栈中的最小元素。
*/
import java.util.*;
public class LC_Stack_01 {
public static void main(String[] args) {
MinStack minStack = new MinStack();
minStack.push(1);
minStack.push(2);
minStack.push(3);
minStack.push(4);
minStack.pop();
minStack.pop();
minStack.printMinStack();
}
}
class MinStack {
private List<Integer> data;
/**
* initialize your data structure here.
*/
public MinStack() {
data = new ArrayList<>();
}
public void push(int val) {
data.add(val);
}
public void pop() {
if (!isEmpty()) {
data.remove(data.size() - 1);
}
}
public int top() {
return data.get(data.size() - 1);
}
public int getMin() {
return Collections.min(data);
}
public boolean isEmpty() {
return data.isEmpty();
}
/* 首先遍历整个栈这个做法就是错误的,只能一个一个的弹出才能知道栈内元素
public void printMinStack(){
Iterator<Integer> iter = data.iterator();
while (iter.hasNext()){
System.out.println(iter.next());
}
}*/
public void printMinStack() {
while (data.size() != 0) {
Integer num = top();
pop();
System.out.println(num);
}
}
}