题解 | #包含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;
    }
};

全部评论

相关推荐

白火同学:1、简历可以浓缩成一页,简历简历先要“简”方便HR快速过滤出有效信息,再要“历”用有效信息突出个人的含金量。 2、教育背景少了入学时间~毕业时间,HR判断不出你是否为应届生。 3、如果你的平台账号效果还不错,可以把账号超链接或者用户名贴到对应位置,一是方便HR知道你是具体做了什么内容的运营,看到账号一目了然,二是口说无凭,账号为证,这更有说服力。
面试被问期望薪资时该如何...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务