• 155. Min Stack


    题目名称

    1. 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() 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.

    初试思路

    获取最小值时,如果在获取时再遍历栈找到最小值是很慢的,所以在push和pop的时候保持最小值的动态更新。

    初试代码

    // 我的代码
    class MinStack {
    public:
        vector > a;
        MinStack() {
            
        }
        
        void push(int val) {
            if(isEmpty()){
                a.push_back({val, val});
            }else{
                a.push_back({val, min(val, a.back().second)});                                             
            }
        }
        void pop() {
            if(!isEmpty()){
                a.pop_back();  
            }
        }
        
        int top() {
            if(!isEmpty()){
                return a.back().first; 
            }
            return 0;
        }
        
        int getMin() {
            if(!isEmpty()){
                return a.back().second;  
            }
            return 0;        
        }
        bool isEmpty(){ //这个函数也可以直接用vector的a.empty()代替
            cout<<(a.size()==0)<push(val);
     * obj->pop();
     * int param_3 = obj->top();
     * int param_4 = obj->getMin();
     */
    
    • 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
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48

    学到了啥

    一、capacity相关函数

    1.size:size_type size() const;

    容器中元素个数。c.size();

    2.max_size():size_type max_size() const;

    返回最大容量。c.maxsize();

    3.resize:void resize (size_type n, value_type val = value_type());

    改变容器可以容纳元素的个数为n。如果n小于当前的容器大小,则保留前面n个元素,移除后面的。如果n大于当前容器大小,就扩展容器。value是初始值,如果n大于当前容器大小,则新增加的元素的值为value,若value省略,会自动调用一个默认值。

    std::vector c;

    for(int i=0;i<10;i++)

     c.push_back(i);
    
    • 1

    c.resize(5);

    c.resize(8,10);

    c.resize(12);

    for(int i=0;i

    std::cout<
    • 1

    结果为:1 2 3 4 5 10 10 10 0 0 0 0

    4.capacity:size_type capacity() const;

    当前分配给容器的存储空间大小(元素个数),这并不限制容器的扩展,理论限制容器扩展大小是max_size的值

    5.empty:bool empty() const;

    返回容器是否为空while(!c.empty()){sum+=c.back();
    c.pop_back();}

    6.reserve:void reserve (size_type n);

    使得capacity至少能容纳n个元素。

    7.shrink_to_fit(C++11):void shrink_to_fit();

    减小capacity,使其与容器大小相同

    四、元素访问相关函数

    1.[ ]操作:获取特定位置的元素。c[i];

    2.at:reference at (size_type n);

       const_reference at (size_type n) const;
    
    • 1

    返回位置n处的元素。c.at(i),与c[i]差不多

    3.front:reference front();

               const_reference front() const;
    
    • 1

    返回容器中的第一个元素。c.front();

    4.back:reference back()

        const_reference back() const;
    
    • 1

    返回容器中最后一个元素。c.back();

    5.data(C++11):value_type* data() noexcept;

           const value_type* data() const noexcept;
    
    • 1

    返回一个指向容器中数组的指针c.data()

    int *p=c.data();

    *p=10;

    ++p;

    *p=20;

    p[2]=100;

    则c中存储的前面三个数据为10、20、100

    五、更新操作

    1.assign:template void assign (InputIterator first, InputIterator last);

               void assign (size_type n, const value_type& val);
    
               void assign (initializer_list il);(C++11)
    
    • 1
    • 2
    • 3

    给容器分配新的内容,并替换当前内容,同时修改大小,val为初始值

    std::vectorfirst;

    std::vectorsecond;

    std::vectorthird;

    first.assign(7,100);

    std::vector::iterator it;

    it=first.begin()+1;

    second.assign(it,first.end()-1);

    int myints[]={1776,7,4};

    third.assign(myints,myints+3);

    std::cout<

    结果为:7 5 3

    2.push_back: void push_back (const value_type& val);

    在容器最后增加一个新的元素。c.push_back(n)

    3.pop_back:void pop_back();

    移除最后一个元素。c.pop_back()

    4.insert:iterator insert(iterator position,const value_type& val):在position处插入元素val

             void insert(iterator position,size_type n,const value_type& val):在position处插入n个元素,插入的元素值初始化为val
    
             void insert(iterator position,InputIterator first,InputIterator last):在position处插入数组中从first到last的元素
    
    • 1
    • 2
    • 3

    vector c(3,100);

    vector::iterator it;

    it=c.begin();

    it=c.insert(it,200);

    c.insert(it,2,300);

    it=c.begin();

    vector d(2,400);

    c.insert(it+2,d.begin(),d.end());

    int s[]={501,502,503};

    c.insert(c.begin(),s,s+3);

    此时c中元素为:501 502 503 300 300 400 400 200 100 100 100

    5.erase:iterator erase(iterator position):删除position处的元素

             iterator erase(iterator first,iterator last):删除first到last的元素
    
    • 1
  • 相关阅读:
    【云计算】云数据中心网络(六):私网连接
    Python——time模块
    Centos - CA 证书服务
    基于Python实现的价值迭代(Value Iterator)
    [N1CTF 2018]eating_cms
    node18 vue2启动报错 error:0308010C:digital envelope routines::unsupported
    结构光照明的显微镜系统
    ROS下机器人系统仿真及部分SLAM建图
    算法题:分别用c++/python/java实现回文数
    【如何三行代码下载指定的股票或者基金数据到pandas中】
  • 原文地址:https://blog.csdn.net/m0_37864814/article/details/127972779