当前位置: 首页> 文旅> 酒店 > 【数据结构与算法 | 栈篇】力扣155

【数据结构与算法 | 栈篇】力扣155

时间:2025/8/26 10:21:55来源:https://blog.csdn.net/2301_80912559/article/details/139335455 浏览次数:0次

1. 力扣155 : 最小栈

(1). 题

设计一个支持 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
  • poptop 和 getMin 操作总是在 非空栈 上调用
  • pushpoptop, and getMin最多被调用 3 * 104 次

(2). 思路1

使用了双端队列和动态数组ArrayList. 每次队列push一个元素,也将该元素add进数组中. 利用Collections工具类的静态方法来求解栈中最小的元素.

(3). 解1

class MinStack {Deque<Integer> deque;List<Integer> list;public MinStack() {deque = new LinkedList<>();list = new ArrayList<>();}public void push(int val) {deque.push(val);list.add(val);}public void pop() {int val = deque.pop();list.remove(Integer.valueOf(val));}public int top() {return deque.peek();}public int getMin() {return Collections.min(list);}
}/*** 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();*/

(4). 思路2

使用双端队列和优先队列来解决. 比较好的一点是优先队列每次将优先级最高的元素出列.在该题中即每次将队列中最小的元素出列.当pop元素时,即从优先级队列中将该元素移除remove出去.

(5). 解2

class MinStack {Deque<Integer> deque;PriorityQueue<Integer> pq;public MinStack() {deque = new LinkedList<>();pq = new PriorityQueue<>();}public void push(int val) {deque.push(val);pq.offer(val);}public void pop() {int val = deque.pop();pq.remove(val);}public int top() {return deque.peek();}public int getMin() {int val = pq.poll();pq.offer(val);return val;}
}
关键字:【数据结构与算法 | 栈篇】力扣155

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: