isempty函数_阿里笔试题设计含最小函数min()、pop()、push()的栈AntMinStack

先来看问题:

设计含最小函数min()、pop()、push()的栈AntMinStack 要求: 1.AntMinStack实现测试,满足栈特性 2.要求min、push、pop、的时间复杂度都是O(1)

首先,我们分析下该题考点:

1、实现测试:需写出测试用例;2、满足栈的特性:栈有几大特性,空间连续,后进先出,线程私有等等,很明显,该处考验的是后进先出;3、时间复杂度都是O(1),说明不管如何改变,花费时间一致;

接下来我们看实现代码:

package com.cookie;import java.util.Random;import java.util.Stack;/** * author : cxq * Date : 2019/8/14 * 栈特点:后进先出 * pop():返回栈顶对象并从栈中移除 * peek():返回栈顶对象 * push():往栈中填充对象 *  */public class AntMinStack { Stack stack = new Stack<>(); Stack minStack = new Stack<>(); /** * push 放入元素 * @param data */ public void push(int data) { // 往stack中放入元素 stack.push(data); if (minStack.isEmpty()){ minStack.push(data); }else { Integer min = minStack.peek(); // 始终保持最小元素放最顶端 if (min != null && min > data ){ minStack.push(data); } } } /** * pop 推出元素 * @return * @throws Exception */ public int pop() throws Exception { Integer data = stack.pop(); if (data != null && !minStack.isEmpty() && minStack.peek() != null && minStack.peek() == data ){ minStack.pop(); } return data ; } /** * min 最小函数,调用该函数,可直接返回当前AntMinStack的栈的最小值 * * @return * @throws Exception */ public int min() throws Exception { return minStack.peek() ; } public boolean empty(){ return minStack.isEmpty() ; } public static void main(String[] args) { AntMinStack minStack = new AntMinStack(); Random random = new Random(31); for (int i = 0; i < 10; i++) { int item = random.nextInt(100); minStack.push(item); System.out.println("Push: " + item); boolean flag = random.nextBoolean(); if (flag && !minStack.empty()) { try { int min = minStack.min(); System.out.println("Peek Min: " + min); } catch (Exception e) { System.err.println(); } } } }}

运行main方法,控制台输出如下:

4434c89d4ea5c8b5c44bb5d98dbc79a1.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值