0
点赞
收藏
分享

微信扫一扫

包含min函数的栈(正解)

剑指 Offer 30. 包含min函数的栈 - 力扣(LeetCode) (leetcode-cn.com)

首先放上运行结果:

思路

求一个数组的最小元素,除了用常规的排序、查找等方式之外,我们还可以用递归的思想来考虑问题:前n个数中的最小元素 = min(前n-1个数中的最小元素,第n个数)。结合栈只对栈顶元素进行操作的特点,我们可以将栈顶元素设置为一个struct,这个struct中有两个成员,val是当前栈顶元素的值,min_val是当前栈中所有元素的最小值,每次插入一个新元素x,只需将x和栈顶min_val相比较就能确定栈的最小元素值更新与否。

代码

class MinStack {
#define scale 0x1D4C    //该数据是本题最大测试用例的规模
#define vacancy 0x7fffffff
    struct e {
        int val;    //保存当前位置元素的值
        int min_val;    //从栈底到当前位置的所有元素中的最小值
    };
    e* stk;
    int sp;
public:
    /** initialize your data structure here. */
    MinStack() {
        stk = new e[scale + 1];
        stk[0].val = vacancy;
        stk[0].min_val = vacancy;
        sp = 1;
    }

    void push(int x) {
        stk[sp].val = x;
        stk[sp].min_val = x < stk[sp - 1].min_val ? x : stk[sp - 1].min_val;
        ++sp;
    }

    void pop() {
        --sp;
    }

    int top() {
        return stk[sp - 1].val;
    }

    int min() {
        return stk[sp - 1].min_val;
    }
};
举报

相关推荐

0 条评论