算法思想:应用文章方法一中用数组方式实现的栈(本代码没有采用Java内置栈方法),通过空间换取时间的方式来提高时间复杂度,也就是说采用额外的存储空间来降低操作的时间复杂度。具体来说就是使用两个栈,一个栈用来存储数据,另一个栈用来存储栈中的最小元素。
代码如下:
package com.haobi;
public class MyStack1 {
MyStack<Integer> elem;
MyStack<Integer> min;
public MyStack1() {
elem = new MyStack<Integer>();//存储数据
min = new MyStack<Integer>();//存储最小元素
}
public void push(int data) {
elem.push(data);
if(min.isEmpty())
min.push(data);
else {
if(data<min.peek())
min.push(data);
}
}
public int pop() {
int topData = elem.peek();
elem.pop();
if(topData == this.min())
min.pop();
return topData;
}
public int min() {
if(min.isEmpty())
return Integer.MAX_VALUE;
else//如果存储最小值的栈不为空,则输出栈顶元素
return min.peek();
}
public static void main(String[] args) {
MyStack1 s = new MyStack1();
s.push(2);//进栈
s.push(1);//进栈
s.push(3);//进栈
System.out.println("栈内最小的元素为:"+s.min());
}
}
程序输出结果如下:
栈内最小的元素为:1