题解 | #包含min函数的栈#

包含min函数的栈

https://www.nowcoder.com/practice/4c776177d2c04c2494f2555c9fcc1e49

#include <vector>
/*
 *思路是设计以pair{value,min_ptr}为元素的栈,
 *每次插入,需额外比较旧栈顶最小值的记录以保持栈顶最小值有效
*/
class Solution {
  private:
    vector<pair<int, int>>kcats;//stack二元栈,附加当前栈深最小值指针
    int cur;//栈顶指针,0开始
  public:
    Solution() {
        //初始化栈,立哨兵,内置逻辑最大值
        kcats.emplace_back(0x0fffffff, 0);
        cur = 0;
    }
    void push(int value) {
        //获取最小值指针,cur++
        int min_loc = kcats[cur++].second;

        //动态扩容避免溢出
        if (kcats.capacity() <= cur)
            kcats.resize(cur << 1);

        //value入栈,比较最小值,若前最小值更小则记录其指针,否则更新为cur
        kcats[cur] = {value, ((value <= kcats[min_loc].first) ? cur : min_loc)};
    }
    void pop() {
        //懒处理
        if (cur > 0)cur--;
    }
    int top() {
        return kcats[cur].first;
    }
    int min() {
        return kcats[kcats[cur].second].first;
    }
};

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务