牛客网刷题java之定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。

题目:

定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的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 {
    //首先创建一个栈
    Stack stack=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来创建一个对象
        Iterator it=stack.iterator();
        //如果迭代器中还有内容,则一直循环
        while(it.hasNext())
        {
            //注意,每次循环当中只能有一个next方法,如果有两个可能会移动过度
            //之前我在测试的时候就是为了简化,将temp变量直接去掉
            //然后直接在if判断中调用一次next,在赋值又调用一次next
            //编译当然可以通过,但是不能通过用例,实现效果
            temp=it.next();
            if(min>temp)
            {
                min=temp;
            }
        }
        return min;
    }
}

 

你可能感兴趣的:(java,剑指offer,栈,请在该类型中实现一个能)