【一刷《剑指Offer》】面试题 21:包含 main 函数的栈

简介: 【一刷《剑指Offer》】面试题 21:包含 main 函数的栈

力扣对应题目链接:155. 最小栈 - 力扣(LeetCode)

牛客对应题目链接:包含min函数的栈_牛客题霸_牛客网 (nowcoder.com)

核心考点 :栈的规则性设计。


一、《剑指Offer》对应内容


二、分析题目

很容易想到,在栈内部保存 min 变量,每次更新的时候,都对 min 变量进行更新。但是,面试官很容易就会问到:如果想拿出第二小,第三小的值怎么拿?

这时再用上面的办法就不行了。为了满足通用,我们使用一个辅助栈,内部保存元素的个数和数据栈完全一样。不过,辅助栈内部永远保存本次入栈的数为所有数据的最小值

注意辅助栈内部元素可能会出现 “必要性重复

这里是为了实现算法, 所以就不从 0 开始实现 stack 了。题面说了,保证测试中不会当栈为空的时候,对栈调用 pop() 或者 min() 或者 top() 方法。所以,后面的代码对空的检验可有可无。


三、代码

//力扣
class MinStack {
private:
    stack<int> val_stack;
    stack<int> min_stack;
public:
    MinStack() {}
    
    void push(int val) {
        val_stack.push(val);
        if(min_stack.empty() || val<min_stack.top())
            min_stack.push(val);
        else
            min_stack.push(min_stack.top());
    }
    
    void pop() {
        if(val_stack.empty() || min_stack.empty()) return;
        val_stack.pop();
        min_stack.pop();
    }
    
    int top() {
        return val_stack.top();
    }
    
    int getMin() {
        return min_stack.top();
    }
};
 
/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack* obj = new MinStack();
 * obj->push(val);
 * obj->pop();
 * int param_3 = obj->top();
 * int param_4 = obj->getMin();
 */
 
//牛客
class Solution {
private:
    stack<int> val_stack;
    stack<int> min_stack;
public:
    void push(int value) {
        val_stack.push(value);
        if(min_stack.empty() || value<min_stack.top())
            min_stack.push(value);
        else
            min_stack.push(min_stack.top());
    }
    void pop() {
        val_stack.pop();
        min_stack.pop();
    }
    int top() {
        return val_stack.top();
    }
    int min() {
        return min_stack.top();
    }
};


相关文章
|
24天前
【一刷《剑指Offer》】面试题 23:从上往下打印二叉树
【一刷《剑指Offer》】面试题 23:从上往下打印二叉树
|
24天前
【一刷《剑指Offer》】面试题 22:栈的压入、弹出系列
【一刷《剑指Offer》】面试题 22:栈的压入、弹出系列
|
24天前
【一刷《剑指Offer》】面试题 20:顺时针打印矩阵
【一刷《剑指Offer》】面试题 20:顺时针打印矩阵
|
24天前
【一刷《剑指Offer》】面试题 19:二叉树的镜像
【一刷《剑指Offer》】面试题 19:二叉树的镜像
|
24天前
【一刷《剑指Offer》】面试题 18:树的子结构
【一刷《剑指Offer》】面试题 18:树的子结构
|
24天前
【一刷《剑指Offer》】面试题 17:合并两个排序的链表
【一刷《剑指Offer》】面试题 17:合并两个排序的链表
|
24天前
【一刷《剑指Offer》】面试题 16:反转链表
【一刷《剑指Offer》】面试题 16:反转链表
|
24天前
【一刷《剑指Offer》】面试题 15:链表中倒数第 k 个结点
【一刷《剑指Offer》】面试题 15:链表中倒数第 k 个结点
|
24天前
|
C++
【一刷《剑指Offer》】面试题 14:调整数组顺序使奇数位于偶数前面
【一刷《剑指Offer》】面试题 14:调整数组顺序使奇数位于偶数前面
|
10天前
|
存储 算法 Java
JAVA后端开发面试题库
JAVA后端开发面试题库
19 1