题目描述:
设计一个支持 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
代码思路:
时间复杂度O(1),用栈本身以外的数据结构实现。
class Node{
int lastmin ;
int val;
Node next;
}
class MinStack {
int min;//全局最小
Node top;//头指针,始终指向头节点
public MinStack() {
top = new Node();//初始化
}
public void push(int val) {
if(top.next==null){
min = val;
}
Node node = new Node();
node.val = val;
node.lastmin=min;//如果把该元素删除之后的,下一个最小值
min = Math.min(min,val);
node.next=top.next;
top.next=node;
}
public void pop() {//删除栈顶元素
Node node = top.next;
min = node.lastmin;
top.next = node.next;
}
public int top() {
return top.next.val;
}
public int getMin() {
return min;
}
}
882

被折叠的 条评论
为什么被折叠?



