이 문제는 단순하게 생각하면 스택을 구현해서 Min 값을 구할 때 매번 O(N)의 복잡도로 값을 구하는 생각을 할 수 있다.
하지만, 그렇게 하는 방법보다 더 간단한 방법이 있다.
Stack을 만들어서 더 작은 값이 나올때마다 이전의 min값을 미리 stack에 쌓아놓고 pop을 할 떄 그 다음에 있는 숫자를 min으로 업데이트 한다.
만약 pop할때 min값이 아니었다면 단순히 pop만을 한다.
이를 통해서 Min 값을 구할 떄의 시간복잡도는 O(1)로 줄어들게 된다.
class MinStack {
int min;
Deque<Integer> deque;
/** initialize your data structure here. */
public MinStack() {
deque = new ArrayDeque<>();
min = Integer.MAX_VALUE;
}
public void push(int x) {
if(x<=min){
deque.push(min);
min=x;
}
deque.push(x);
}
public void pop() {
if(deque.pop()==min)
min=deque.pop();
}
public int top() {
return deque.getFirst();
}
public int getMin() {
return min;
}
}
'문제풀이' 카테고리의 다른 글
Leetcode Coin Change Java (0) | 2021.01.20 |
---|---|
Leetcode Count and Say Java (0) | 2021.01.20 |
Leetcode Climbing Stairs JAVA (0) | 2021.01.04 |
Leetcode Happy Number JAVA (0) | 2021.01.04 |
Leetcode Best Time to Buy and Sell Stock JAVA (0) | 2021.01.04 |