(LeetCode 面试经典 150 题 ) 155. 最小栈 (栈)

题目:155. 最小栈


思路:栈,时间复杂度0(n)。

在插入栈元素val时,同时加入一个字段,维护插入当前元素val时的最小值即可。

C++版本:

cpp 复制代码
class MinStack {
public:
    stack<pair<int,int>> st;
    MinStack() {
    	// 哨兵
        st.push({0,INT_MAX});
    }
    
    void push(int val) {
        st.push({val,min(getMin(),val)});
    }
    
    void pop() {
        st.pop();
    }
    
    int top() {
        return st.top().first;
    }
    
    int getMin() {
        return st.top().second;
    }
};

/**
 * 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();
 */

JAVA版本:

java 复制代码
class MinStack {
    private final Deque<int[]> st=new ArrayDeque<>();
    public MinStack() {
        st.push(new int[]{0,Integer.MAX_VALUE});
    }
    
    public void push(int val) {
        st.push(new int[]{val,Math.min(getMin(),val)});
    }
    
    public void pop() {
        st.pop();
    }
    
    public int top() {
        return st.peek()[0];
    }
    
    public int getMin() {
        return st.peek()[1];
    }
}

/**
 * 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();
 */

GO版本:

go 复制代码
type PII struct {
    x int
    y int
}

type MinStack struct {
    st []PII 
}


func Constructor() MinStack {
    return MinStack{[]PII{{0,math.MaxInt}}}
}


func (this *MinStack) Push(val int)  {
    this.st=append(this.st,PII{val,min(this.GetMin(),val)})
}


func (this *MinStack) Pop()  {
    this.st=this.st[:len(this.st)-1]
}


func (this *MinStack) Top() int {
    return this.st[len(this.st)-1].x
}


func (this *MinStack) GetMin() int {
    return this.st[len(this.st)-1].y
}


/**
 * Your MinStack object will be instantiated and called as such:
 * obj := Constructor();
 * obj.Push(val);
 * obj.Pop();
 * param_3 := obj.Top();
 * param_4 := obj.GetMin();
 */
相关推荐
都叫我大帅哥7 分钟前
Java PriorityQueue:小顶堆大智慧,优先队列全揭秘
java
xdlka8 分钟前
C++初学者4——标准数据类型
开发语言·c++·算法
都叫我大帅哥12 分钟前
TOGAF实施治理阶段:你的项目守护神,还是架构警察?
java
go546315846514 分钟前
大规模矩阵构建与高级算法应用
线性代数·算法·矩阵
吹个口哨写代码22 分钟前
防止包含 XSS 攻击风险的内容提交成功
java·服务器·前端
hrrrrb39 分钟前
【Spring Boot 快速入门】一、入门
java·spring boot·后端
程序员爱钓鱼44 分钟前
Go语言实战案例-深度优先遍历DFS
后端·google·go
向左转, 向右走ˉ1 小时前
为什么分类任务偏爱交叉熵?MSE 为何折戟?
人工智能·深度学习·算法·机器学习·分类·数据挖掘
程序员爱钓鱼1 小时前
Go语言实战案例-广度优先遍历BFS
后端·google·go
云边有个稻草人2 小时前
【C++】第十九节—一文万字详解 | AVL树实现
数据结构·c++·avl树·avl树的插入·avl树的旋转·avl树实现·avl树的结构