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

这篇博客介绍了一种在Java中实现栈数据结构并添加min函数的方法,该函数能在常数时间内返回栈中的最小元素。作者通过迭代器遍历栈中的元素,与当前最小值比较并更新,确保min函数的时间复杂度为O(1)。博客内容包括push、pop、top和min四个关键操作的代码实现。
摘要由CSDN通过智能技术生成

题目:

定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的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;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值