网站首页 > 文章精选 正文
最小栈
- 采用2个stack实现算法
题目描述
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。
实现 MinStack 类:
- MinStack() 初始化堆栈对象。
- void push(int val) 将元素val推入堆栈。
- void pop() 删除堆栈顶部的元素。
- int top() 获取堆栈顶部的元素。
- int getMin() 获取堆栈中的最小元素。
示例 1:
输入:
["MinStack","push","push","push","getMin","pop","top","getMin"]
[[],[-2],[0],[-3],[],[],[],[]]
输出:
[null,null,null,null,-3,null,0,-2]
解释:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.getMin(); --> 返回 -2.
rust实现算法
struct MinStack {
m_stk: Vec<i32>,
m_minstk: Vec<i32>,
}
/**
* `&self` means the method takes an immutable reference.
* If you need a mutable reference, change it to `&mut self` instead.
*/
impl MinStack {
fn new() -> Self {
MinStack {
m_stk: Vec::new(),
m_minstk: Vec::new(),
}
}
fn push(&mut self, val: i32) {
self.m_stk.push(val);
let min_val = match self.m_minstk.last() {
Some(¤t_min) => val.min(current_min),
None => val,
};
self.m_minstk.push(min_val);
}
fn pop(&mut self) {
self.m_stk.pop();
self.m_minstk.pop();
}
fn top(&self) -> i32 {
self.m_stk.last().copied().unwrap()
}
fn get_min(&self) -> i32 {
self.m_minstk.last().copied().unwrap()
}
}
/**
* Your MinStack object will be instantiated and called as such:
* let obj = MinStack::new();
* obj.push(val);
* obj.pop();
* let ret_3: i32 = obj.top();
* let ret_4: i32 = obj.get_min();
*/
猜你喜欢
- 2025-07-02 一文吃透ConcurrentHashMap的前世与今生
- 2025-07-02 钟表程序(C语言+SDL2)(时钟程序编写)
- 2025-07-02 教你实现高逼格Android弹幕效果(安卓弹幕助手)
- 2025-07-02 C语言的十大组数排序法:选择排序!竟然可以这么快!
- 2025-07-02 基于LockAI视觉识别模块:C++同时识别轮廓和色块
- 2025-07-02 国产教学实验箱_DSP教学实验箱_操作教程:4-4 有限冲激响应滤波器
- 2025-07-02 Android 系统核心机制binder(04)binder C++层 TestServer分析
- 2025-07-02 乐鑫esp32系列在睡眠模式蓝牙连接功耗测试,启明云端乐鑫代理商
- 2025-07-02 深度解析HashMap集合底层原理(使用hashmap集合迭代出元素的和元素存入的顺序)
- 2025-07-02 c++时间和日期(c++计算日期对应的天数)
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)