프로그래머 면접 100 문제 2

8040 단어 직장stackmin레저
제목: 스 택 의 데이터 구 조 를 정의 합 니 다. min 함 수 를 추가 하여 스 택 의 최소 요 소 를 얻 을 수 있 도록 해 야 합 니 다.요구 함수 min, push 및 pop 의 시간 복잡 도 는 모두 O (1) 입 니 다.
해법: 두 개의 vector 로 이 기능 을 실현 합 니 다. 하 나 는 스 택 에 있 는 실제 데 이 터 를 저장 하 는 데 사 용 됩 니 다. 하 나 는 스 택 에 들 어 갈 때마다 가장 작은 요 소 를 저장 하 는 데 사 용 됩 니 다.
우선 vector 의 함수 들 을 복습 합 니 다.
/ / vector 정의
std::vector c;
/ / 사용 가능 한 기능
c.clear()         용기 의 모든 데 이 터 를 제거 합 니 다.
c.empty()         용기 가 비어 있 는 지 아 닌 지 를 판단 하 다.
c.erase(pos)        pos 위치 데이터 삭제
c. erase (beg, end) 에서 [beg, end) 구간 의 데 이 터 를 삭제 합 니 다.
c.front()         첫 번 째 데 이 터 를 되 돌려 줍 니 다.
c.back()       마지막 데 이 터 를 되 돌려 줍 니 다.
c.insert(pos,elem)  pos 위치 에 elem 복사 삽입
c.pop_back()     마지막 데 이 터 를 삭제 합 니 다.
c. push back (elem) 은 끝 에 데 이 터 를 추가 합 니 다.
c.resize(num)     이 용기 의 크기 를 다시 설정 합 니 다.
c.size()         용기 에 있 는 실제 데이터 의 개 수 를 되 돌려 줍 니 다.
c.begin()           용기 의 첫 번 째 요 소 를 가리 키 는 교체 기 를 되 돌려 줍 니 다.
c.end()             용기 의 마지막 요 소 를 가리 키 는 교체 기 를 되 돌려 줍 니 다.
코드 는 다음 과 같 습 니 다:
 

  
  
  
  
  1. // minstack.cpp : Defines the entry point for the console application.  
  2. //  
  3.  
  4. #include "stdafx.h"  
  5. #include<iostream>  
  6. // vector  
  7. #include<vector>  
  8. //assert()  
  9. #include<assert.h>  
  10. using namespace std;  
  11.  
  12. //  
  13. template<class T> class MinStack  
  14. {  
  15.     public:  
  16.         MinStack(){};//  
  17.         ~MinStack(){};  
  18.         T& top();  
  19.         void push(const T value);  
  20.         void pop();  
  21.         T& min();  
  22.     private:  
  23.         vector<T> stackdata;  
  24.         vector<T> minstackdata;  
  25.  
  26. };  
  27. template<class T> T& MinStack<T>::top()  
  28. {  
  29.     return stackdata.back();  
  30.  
  31. }  
  32. template<class T> void MinStack<T>::push(const T value)  
  33. {  
  34.     stackdata.push_back(value);  
  35.     if(minstackdata.size()==0)  
  36.         minstackdata.push_back(0);  
  37.     else 
  38.     {  
  39.         if(value<stackdata[minstackdata.back()])  
  40.             minstackdata.push_back(stackdata.size()-1);  
  41.         else 
  42.             minstackdata.push_back(minstackdata.back());  
  43.     }  
  44.  
  45. }  
  46. template<class T> void MinStack<T>::pop()  
  47. {  
  48.     // assert  
  49.     assert(stackdata.size()>0);  
  50.         assert(minstackdata.size()>0);  
  51.         stackdata.pop_back();  
  52.     minstackdata.pop_back();  
  53.  
  54. }  
  55. template<class T> T& MinStack<T>::min()  
  56. {       assert(stackdata.size()>0);  
  57.         assert(minstackdata.size()>0);  
  58.  
  59.     return stackdata[minstackdata.back()];  
  60. }  
  61. int main(int argc, char* argv[])  
  62. {  
  63.     MinStack<int> a;//  
  64.     a.push(3);  
  65.     cout<<a.min()<<endl;  
  66.     a.push(4);  
  67.         cout<<a.min()<<endl;  
  68.     a.push(2);  
  69.         cout<<a.min()<<endl;  
  70.     a.push(1);  
  71.         cout<<a.min()<<endl;  
  72.     cout<<a.top()<<endl;  
  73.     a.pop();  
  74.  
  75.     return 0;  
  76. }  
  77.  

좋은 웹페이지 즐겨찾기