算法思想:应用文章方法一中用数组方式实现的栈(本代码没有采用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
本文介绍了一种利用两个栈实现高效获取最小值的方法。主要思路是在存储数据的同时,维护一个辅助栈,用于存储当前栈中的最小元素。这种方法在不牺牲插入和删除效率的前提下,实现了O(1)时间复杂度的最小值查询。
1万+

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



