Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.
push(x) -- Push element x onto stack.
pop() -- Removes the element on top of the stack.
top() -- Get the top element.
getMin() -- Retrieve the minimum element in the stack.
Example: MinStack minStack = new MinStack(); minStack.push(-2); minStack.push(0); minStack.push(-3); minStack.getMin(); --> Returns -3. minStack.pop(); minStack.top(); --> Returns 0. minStack.getMin(); --> Returns -2.
import java.util.*;
class MinStack {
/** initialize your data structure here. */
List<Integer> stack;
public MinStack() {
stack = new ArrayList<Integer>();
}
public void push(int x) {
stack.add(0, x);
}
public void pop() {
stack.remove(0);
}
public int top() {
return stack.get(0);
}
public int getMin() {
int min = Integer.MAX_VALUE;
for (int i = 0; i < stack.size(); i++) {
if (min > stack.get(i)) {
min = stack.get(i);
}
}
return min;
}
}
문제를 풀고 다른 사람들이 작성한 코드를 보았는데 push()메소드를 작성할 때 값이 들어올 때 부터 최솟값을 비교하면서 최솟값을 가지고 있는 변수를 따로 생성해서 저장해놓으면 getMin()메소드에서 해당 변수를 바로 반환해주게 하는 방법도 있다는 것을 알았다!