互联网旅游网站建设策划书,红酒网站建设模板,偃师市住房和城乡建设局网站,百度网盘会员设计一个支持 push #xff0c;pop #xff0c;top 操作#xff0c;并能在常数时间内检索到最小元素的栈。
实现 MinStack 类:
MinStack() 初始化堆栈对象。 void push(int val) 将元素val推入堆栈。 void pop() 删除堆栈顶部的元素。 int top() 获取堆栈顶部的元素。 int…设计一个支持 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.
提示
-231 val 231 - 1 pop、top 和 getMin 操作总是在 非空栈 上调用 push, pop, top, and getMin最多被调用 3 * 104 次
第一种栈
class MinStack {// 数据栈用于存储元素public StackInteger data;// 最小值栈用于存储当前栈内的最小值public StackInteger min;// 构造函数初始化两个栈public MinStack() {data new StackInteger();min new StackInteger();}// 元素入栈操作public void push(int val) {data.push(val); // 将元素压入数据栈// 如果最小值栈为空或者新元素小于当前最小值栈顶元素if (min.empty() || val min.peek()) {min.push(val); // 将新元素压入最小值栈} else {min.push(min.peek()); // 否则将当前最小值栈顶元素再次压入最小值栈保持与数据栈元素个数一致}}// 元素出栈操作public void pop() {data.pop(); // 从数据栈中弹出一个元素min.pop(); // 同时从最小值栈中弹出一个元素保持两个栈的同步}// 获取栈顶元素public int top() {return data.peek(); // 返回数据栈的栈顶元素不出栈}// 获取当前栈内的最小值public int getMin() {return min.peek(); // 返回最小值栈的栈顶元素即当前栈内的最小值}
}第二种数组自定义栈
class MinStack {public final int MAXN 8001; // 定义最大容量int[] data; // 存储元素的数组int[] min; // 存储当前最小元素的数组int size; // 栈的大小public MinStack() {data new int[MAXN]; // 初始化data数组min new int[MAXN]; // 初始化min数组size 0; // 初始化栈大小}// 入栈操作public void push(int val) {data[size] val; // 将元素放入data数组if (size 0 || val min[size - 1]) {min[size] val; // 更新min数组如果val比前一个最小值小} else {min[size] min[size - 1]; // 如果val不是最小值保持原最小值}size; // 增加栈大小}// 出栈操作public void pop() {size--; // 减少栈大小相当于出栈}// 获取栈顶元素public int top() {return data[size - 1]; // 返回栈顶元素}// 获取栈中的最小元素public int getMin() {return min[size - 1]; // 返回当前最小元素}
}https://leetcode.cn/problems/min-stack/description/
参考左程云老师算法系列