(검 지 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;
};

  

좋은 웹페이지 즐겨찾기