[LeetCode] Min stack (Java)

고승우·2023년 1월 5일
0

알고리즘

목록 보기
1/86
post-thumbnail

문제는 아래와 같다.

Leet Code Min stack

Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.

  • MinStack() initializes the stack object.
  • void push(int val) pushes the element val onto the stack.
  • void pop() removes the element on the top of the stack.
  • int top() gets the top element of the stack.
  • int getMin() retrieves the minimum element in the stack.
    You must implement a solution with O(1) time complexity for each function.

최솟값을 어떻게 O(1)의 시간 복잡도로 출력할 수 있을까?

pop() 그리고 push()마다 최솟값을 업데이트, push는 구현이 어렵지 않으나 pop()이 문제였다.

스택에 매 요소마다 최솟값을 같이 저장해주면 쉽게 해결할 수 있다.

3개의 요소가 들어가 있는 경우를 예시로 들면
idx: 0 = 1번 인덱스까지의 최솟값
idx: 1 = 첫 번째 element
idx: 2 = 3번 인덱스까지의 최솟값
idx: 3 = 두 번째 element
idx: 4 = 5번 인덱스까지의 최솟값
idx: 5 = 세 번째 element

stack.pop()은 첫 번째 요소를 pop한다 즉, stack에 push한 경우 0번 인덱스부터 들어온다.

import java.util.LinkedList;

class MinStack {
    LinkedList<Integer> stack  = new LinkedList<>();

    public MinStack() {
    }

    public void push(int val) {
        if (stack.isEmpty())
        {
            stack.push(val);
        }
        else
        {
            stack.push(Math.min(stack.get(1), val));
        }
        stack.push(val);
    }

    public void pop() {
        stack.pop();
        stack.pop();
    }

    public int top() {
        return stack.get(0);
    }


    public int getMin() {
        return stack.get(1);
    }
}


/*
 * 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();
 */
profile
٩( ᐛ )و 

0개의 댓글