题目:
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
思路:
利用迭代器一个一个取值,与最小值比较,如果更小则替换。
代码中需要注意的问题:
import java.util.Iterator;需要导入用到的迭代器包
stack的三个方法,pop()移除栈顶元素并返回值push(item)入栈peek()获取栈顶内容但不移除
在while循环中,迭代器只能调用一次next方法
代码:
import java.util.Stack;
//题目中没有给这个导入,可以自己加入
import java.util.Iterator;
public class Solution {
//首先创建一个栈
Stackstack=new Stack();
public void push(int node) {
//入栈
stack.push(node);
}
public void pop() {
//移除栈,并将内容返回给方法
stack.pop();
}
public int top() {
//取栈顶的内容,但是并不移除
return stack.peek();
}
public int min() {
//这里的思路就比较简单,现将最小值记录
//然后利用迭代器遍历,如果有更小的则重新赋值
int min=stack.peek();
int temp=0;
//用栈获取一个迭代器,这个地方容易记错
//栈是通过stack的方法获取的,而不是通过new来创建一个对象
Iteratorit=stack.iterator();
//如果迭代器中还有内容,则一直循环
while(it.hasNext())
{
//注意,每次循环当中只能有一个next方法,如果有两个可能会移动过度
//之前我在测试的时候就是为了简化,将temp变量直接去掉
//然后直接在if判断中调用一次next,在赋值又调用一次next
//编译当然可以通过,但是不能通过用例,实现效果
temp=it.next();
if(min>temp)
{
min=temp;
}
}
return min;
}
}