题目:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
思路:使用两个栈,一个栈用来存放正常的数据,一个栈用来记录到该数据为止,栈中数据的最小值
import java.util.Stack;
public class StackMin {
Stack stack = new Stack();
Stack stackmin = new Stack();
public void push(int node) {
stack.push(node);
if (this.stackmin.size() > 0){
stackmin.push(Math.min((int)stackmin.peek(),node));
} else {
stackmin.push(node);
}
}
public void pop() {
if (this.stack.size() > 0){
int data = (int)this.stack.pop();
int stackmin_pop = (int)this.stackmin.pop();
}
}
public int top() {
if (this.stack.size() > 0){
return (int)this.stack.peek();
}
return 0;
}
public int min() {
if (this.stack.size() > 0){
return (int)this.stackmin.peek();
}
return 0;
}
public static void main(String[] args) {
StackMin s = new StackMin();
s.push(19);
s.push(21);
s.push(5);
s.push(-1);
System.out.println(s.min());
System.out.println(s.top());
s.pop();
System.out.println(s.min());
}
}

本文介绍了一种使用两个栈实现数据结构的方法,其中一个栈用于存储常规数据,另一个栈用于跟踪当前栈中的最小值,从而实现在O(1)时间复杂度内获取栈中最小元素的功能。
5万+

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



