刷题7:最小栈
Posted 嗯
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了刷题7:最小栈相关的知识,希望对你有一定的参考价值。
Leetcode:155. 最小栈
方法1:
关键点:定义两个栈st和stMin,st存放所有元素,stMin存放最小值。
压入:
即将入栈的元素如果val<stMin.peek(),则将val压入stMin,如果val>=stMin.peek(),将stMin栈顶元素再次压入stMin,无论什么情况都要把val压入st。
弹出:
st和stMin分别弹出元素即可。
class MinStack {
Stack<Integer> st;
Stack<Integer> stMin;
/** initialize your data structure here. */
public MinStack() {
st = new Stack<Integer>();
stMin = new Stack<Integer>();
}
public void push(int val) {
st.push(val);
if(stMin.isEmpty()){
stMin.push(val);
}else if(val < getMin()){
stMin.push(val);
}else{
stMin.push(stMin.peek());
}
}
public void pop() {
if(st.isEmpty()){
return;
}else{
st.pop();
stMin.pop();
}
}
public int top() {
if(st.isEmpty()){
return -1;
}else{
return st.peek();
}
}
public int getMin() {
if(stMin.isEmpty()){
return -1;
}else{
return stMin.peek();
}
}
}
方法2:
1.压栈
如果stMin是空的,则将val压入stMin;如果stMin不为空且val<=stMin.peek(),也将val压入栈中。st无论哪种情况都压入val。
2.出栈
st栈无论哪种情况都把元素弹出。如果st弹出的值等于stMin的栈顶元素时,stMin.pop()把栈顶元素弹出。
class MinStack {
Stack<Integer> st;
Stack<Integer> stMin;
/** initialize your data structure here. */
public MinStack() {
st = new Stack<Integer>();
stMin = new Stack<Integer>();
}
public void push(int val) {
st.push(val);
if(stMin.isEmpty()){
stMin.push(val);
}else if(val <= getMin()){
stMin.push(val);
}
}
public void pop() {
if(st.isEmpty()){
return;
}else{
if(getMin() == st.peek()){
stMin.pop();
}
st.pop();
}
}
public int top() {
if(st.isEmpty()){
return -1;
}else{
return st.peek();
}
}
public int getMin() {
if(stMin.isEmpty()){
return -1;
}else{
return stMin.peek();
}
}
}
以上是关于刷题7:最小栈的主要内容,如果未能解决你的问题,请参考以下文章