剑指offer----包含min函数的栈
2018-02-04 本文已影响0人
qming_c
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
方法一:
费时间,省空间
import java.util.Stack;
public class Solution {
private Stack<Integer> stackData = new Stack<>();
private Stack<Integer> stackMin= new Stack<>();
public void push(int node) {
stackData.push(node);
if(stackMin.empty()||node <= min()){
stackMin.push(node);
}
}
public void pop() {
if(stackData.empty()){
return;
}
if(stackData.pop() == min()){
stackMin.pop();
}
}
public int top() {
return stackData.peek();
}
public int min() {
return stackMin.peek();
}
}
方法二
费空间,省时间。
import java.util.Stack;
public class Solution {
private Stack<Integer> stackData = new Stack<>();
private Stack<Integer> stackMin= new Stack<>();
public void push(int node) {
stackData.push(node);
if(stackMin.empty() || node < min()){
stackMin.push(node);
}else{
stackMin.push(min());
}
}
public void pop() {
stackData.pop();
stackMin.pop();
}
public int top() {
return stackData.peek();
}
public int min() {
return stackMin.peek();
}
}
以上两种方法,均使用了两个栈来实现,data栈用例正常存储数据,min栈用来记录最小值。
方法一是每次压入数据栈之后与min栈顶比较,如果小于等于min栈顶,就压入,否则不则不压入,数据栈出栈的时候也要进行判断是否将min栈中的数据弹出。
方法二时每次压入数据栈之后与min栈顶比较,如果小于等于min栈顶 压入该值,再把min栈顶的值压入min一次。出栈时不需要判断,直接同步弹出。