(검 지 Offer) 면접 문제 21: min 함 수 를 포함 한 스 택
2126 단어 면접 문제
스 택 의 데이터 구 조 를 정의 합 니 다. 이 형식 에서 스 택 의 최소 요 소 를 얻 을 수 있 는 min 함 수 를 실현 하 십시오.
이 스 택 에서 min, push, pop 을 호출 하 는 시간 복잡 도 는 모두 O (1) 입 니 다.
생각:
원래 스 택 s 를 제외 하고 보조 스 택 s 를 추가 합 니 다.min, 창고 에 들 어 갈 때마다 최소 요 소 를 저장 합 니 다.
Push 조작:
창고 s: 원소 value 가 창고 s 에 직접 들 어가 기;
창고 smin: 판단 smin 이 비어 있 거나 value 가 s 보다 작 을 지 여부min 스 택 꼭대기 요소, 그렇다면 value 를 스 택 s 에 눌 러 줍 니 다.min, 그렇지 않 으 면 smin. top () 스 택 smin;
Pop 조작:
창고 s: s. pop ();
창고 smin:s_min.pop();
Min 조작:
return s_min.top();
코드:
template<typename T>
class StackWithMin{
public:
void push(const T& value);
void pop();
const T& min() const;
private:
stack<T> s;
stack<T> s_min;
};
template<typename T>
void StackWithMin<T>::push(const T& value){
s.push(value);
if(s_min.empty() || value<s_min.top())
s_min.push(value);
else
s_min.push(s_min.top());
}
template<typename T>
void StackWithMin<T>::pop(){
assert(!s.empty() && !s.empty());
s.pop();
s_min.pop();
}
template<typename T>
const T& StackWithMin<T>::min() const{
assert(!s.empty() && !s.empty());
return s_min.top();
}
온라인 테스트 OJ:
http://www.nowcoder.com/books/coding-interviews/4c776177d2c04c2494f2555c9fcc1e49?rp=1
AC 코드:
class Solution {
public:
void push(int value) {
s.push(value);
if(s_min.empty() || value<s_min.top())
s_min.push(value);
else
s_min.push(s_min.top());
}
void pop() {
s.pop();
s_min.pop();
}
int top() {
return s.top();
}
int min() {
return s_min.top();
}
private:
stack<int> s;
stack<int> s_min;
};
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java 프로그래머 면접에서의 다중 스레드 문제 요약wait ()/notify ()/notify All () 의 모든 방법을 호출할 때, 현재 라인이 이 대상의 자물쇠를 얻지 못하면, Illegal MonitorState Exception의 이상을 던집니다. Thre...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.