Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 인스타클론
- 멀티폼
- 스프링부트구독취소
- 출처 코딩셰프
- springboot_exception_handler
- 스프링부트
- 스프링부트팔로잉
- 스프링부트사진올리기
- 스프링부트중복예외처리
- 우분투도커설치
- WAS웹서버
- 도커설치하는법
- 스프링익셉션처리
- 스프링구독
- 스프링사진
- 스프링부트팔로우취소
- vm도커설치하는법
- 스프링부트api
- 출처 문어박사
- 출처 메타코딩
- 스프링사진업로드
- 출처 따배도
- dockerinstall
- 파이썬sort
- 서버에도커설치
- ssh도커설치
- centos도커설치
- 스프링이미지업로드
- 출처 노마드코더
- 스프링부트서버에사진전송
Archives
- Today
- Total
MakerHyeon
[LeetCode] 155. Min Stack 본문
https://leetcode.com/problems/min-stack/
Min Stack - LeetCode
Min Stack - Design a stack that supports push, pop, top, and retrieving the minimum element in constant time. Implement the MinStack class: * MinStack() initializes the stack object. * void push(int val) pushes the element val onto the stack. * void pop()
leetcode.com
이 문제의 핵심은 getMin이다. O(1)의 시간복잡도를 가지면서 Stack에서 최소값을 조회하려면 어떻게 해야할까?
답은 minStack을 하나 더 두어,Push와 pop을 할때(즉,Data에 변화가 있을때) Min Stack에는 현재의 min 요소를 추가하도록 하는것이다. 이렇게 하면 최소값을 조회할때 맨 상단의 값을 리턴하면된다.
SOLUTION CODE
# PYTHON
# Best Code
class MinStack:
def __init__(self):
self.stack = []
self.minStack = []
def push(self, val: int) -> None:
self.stack.append(val)
val = min(val,self.minStack[-1] if self.minStack else val)
self.minStack.append(val)
def pop(self) -> None:
self.stack.pop()
self.Minstack.pop()
def top(self) -> int:
return self.stack[-1]
def getMin(self) -> int:
return self.minStack[-1]
# Your MinStack object will be instantiated and called as such:
# obj = MinStack()
# obj.push(val)
# obj.pop()
# param_3 = obj.top()
# param_4 = obj.getMin()
# C++ 내풀이 : 스택사용
#include <iostream>
#include <string>
#include <stack>
class MinStack {
int min=0;
stack<int> s;
stack<int> m;
public:
MinStack() {
min=0;
}
void push(int val) {
s.push(val);
if(m.empty()){ // m이 비어있을때
m.push(val);
}
else if(m.top()>=val){ // val이 최소값일때
m.push(val);
}
else{
int t = m.top();
m.push(t);
}
}
void pop() {
s.pop();
m.pop();
}
int top() {
return s.top();
}
int getMin() {
return m.top();
}
};
# C++ Best Code (스택에 pair<현재값,현재의 최소값> 을 넣어준다.)
class MinStack {
public:
vector< pair<int,int> > s;
MinStack() { }
void push(int val) {
if(s.empty())
s.push_back({val,val});
else
s.push_back({val,min(s.back().second,val)});
}
void pop() { s.pop_back(); }
int top() { return s.back().first; }
int getMin() { return s.back().second; }
};
'Algorithm > LeetCode' 카테고리의 다른 글
[LeetCode] 206. Reverse Linked List (0) | 2023.01.10 |
---|---|
[LeetCode] 20. Valid Parentheses (0) | 2023.01.06 |
[LeetCode] 36. Valid Sudoku (0) | 2023.01.04 |
49. Group Anagrams (0) | 2023.01.03 |
682. Baseball Game (0) | 2023.01.02 |
Comments