(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();
 */
相关推荐
哈里谢顿5 小时前
20260303面试总结(全栈)
面试
怒放吧德德6 小时前
Netty 4.2 入门指南:从概念到第一个程序
java·后端·netty
雨中飘荡的记忆8 小时前
大流量下库存扣减的数据库瓶颈:Redis分片缓存解决方案
java·redis·后端
阿里云云原生9 小时前
5 分钟零代码改造,让 Go 应用自动获得全链路可观测能力
云原生·go
over69710 小时前
从 LLM 到全栈 Agent:MCP 协议 × RAG 技术如何重构 AI 的“做事能力”
面试·llm·mcp
心之语歌10 小时前
基于注解+拦截器的API动态路由实现方案
java·后端
SuperEugene11 小时前
Vue状态管理扫盲篇:如何设计一个合理的全局状态树 | 用户、权限、字典、布局配置
前端·vue.js·面试
blasit11 小时前
笔记:Qt C++建立子线程做一个socket TCP常连接通信
c++·qt·tcp/ip
华仔啊11 小时前
Stream 代码越写越难看?JDFrame 让 Java 逻辑回归优雅
java·后端
ray_liang11 小时前
用六边形架构与整洁架构对比是伪命题?
java·架构