class MinStack {
public MinStack() {
}
public void push(int val) {
}
public void pop() {
}
public int top() {
}
public int getMin() {
}
}
/**
* Your MinStack object will be instantiated and called as such:
* MinStack obj = new MinStack();
* obj.push(val);
* obj.pop();
* int param_3 = obj.top();
* int param_4 = obj.getMin();
*/
주어진 메소드에 맞게 코드를 넣는 문제입니다.
Stack 을 사용하여 다른 메소드들을 채우고 getMin()
을 O(1)로 반환합니다.
Stack 을 하나 더 사용하여 최소값이 pop 되는 경우에 전 최소값이 peek 될 수 있도록 만들었습니다.
import java.util.*;
class MinStack {
Stack<Integer> stack;
Stack<Integer> minStack;
public MinStack() {
stack = new Stack<>();
minStack = new Stack<>();
}
public void push(int val) {
stack.push(val);
if(minStack.isEmpty() || minStack.peek() >= val) {
minStack.push(val);
}
}
public void pop() {
int pop = stack.pop();
if(minStack.peek() == pop) {
minStack.pop();
}
}
public int top() {
return stack.peek();
}
public int getMin() {
return minStack.peek();
}
}
/**
* Your MinStack object will be instantiated and called as such:
* MinStack obj = new MinStack();
* obj.push(val);
* obj.pop();
* int param_3 = obj.top();
* int param_4 = obj.getMin();
*/