设计一个有getMin功能的栈
时间:2022-05-07
本文章向大家介绍设计一个有getMin功能的栈,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
【题目】
实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中的最小元素的操作。
【要求】
1.pop、push、getMin操作的时间复杂度都是O(1)。
2.设计的栈类型可以使用现成的栈结构。
方案一的代码实现如下:
1 import java.util.Stack;
2 public class MyStack1 {
3 private Stack<Integer> stackData;
4 private Stack<Integer> stackMin;
5 public MyStack1()
6 {
7 this.stackData=new Stack<Integer>();
8 this.stackMin=new Stack<Integer>();
9 }
10 public void push(int newNum)
11 {
12 if(this.stackMin.isEmpty()||newNum<=this.getmin())
13 this.stackMin.push(newNum);
14 this.stackData.push(newNum);
15 }
16 public int pop()
17 {
18 if(this.stackData.isEmpty())
19 System.out.println("Your stack is empty!");
20 int value=this.stackData.pop();
21 if(value==this.getmin())
22 this.stackMin.pop();
23 return value;
24 }
25 public int getmin()
26 {
27 if(this.stackMin.isEmpty())
28 System.out.println("Your stack is empty!");
29 return this.stackMin.peek();
30 }
31 public static void main(String[] args)
32 {
33 MyStack1 s=new MyStack1();
34 s.push(3);
35 s.push(4);
36 s.push(5);
37 s.push(1);
38 s.push(2);
39 s.push(1);
40 System.out.println(s.getmin());
41 System.out.println(s.pop());
42 System.out.println(s.pop());
43 System.out.println(s.pop());
44 System.out.println(s.pop());
45 System.out.println(s.pop());
46 System.out.println(s.pop());
47 System.out.println(s.pop());
48 }
49 }
运行结果如下:
1
1
2
1
5
4
3
Your stack is empty!
方法二的实现代码如下:
1 import java.util.Stack;
2 public class MyStack2 {
3 private Stack<Integer> stackData;
4 private Stack<Integer> stackMin;
5 public MyStack2()
6 {
7 this.stackData=new Stack<Integer>();
8 this.stackMin=new Stack<Integer>();
9 }
10 public void push(int newNum)
11 {
12 if(this.stackMin.isEmpty()||newNum<this.getmin())
13 this.stackMin.push(newNum);
14 else
15 {
16 int newMin=this.stackMin.peek();
17 this.stackMin.push(newMin);
18 }
19 this.stackData.push(newNum);
20 }
21 public int pop()
22 {
23 if(this.stackData.isEmpty())
24 System.out.println("Your stack is empty!");
25 this.stackMin.pop();
26 return this.stackData.pop();
27 }
28 public int getmin()
29 {
30 if(this.stackMin.isEmpty())
31 System.out.println("Your stack is empty!");
32 return this.stackMin.peek();
33 }
34 public static void main(String[] args)
35 {
36 MyStack2 s=new MyStack2();
37 s.push(3);
38 s.push(4);
39 s.push(5);
40 s.push(1);
41 s.push(2);
42 s.push(1);
43 System.out.println(s.getmin());
44 System.out.println(s.pop());
45 System.out.println(s.pop());
46 System.out.println(s.pop());
47 System.out.println(s.pop());
48 System.out.println(s.pop());
49 System.out.println(s.pop());
50 System.out.println(s.pop());
51 }
52 }
运行结果如下:
1
1
2
1
5
4
3
Your stack is empty!
- SpringBoot-Mybatis_Plus学习记录之公共字段自动填充
- Windows 安装配置 JIRA
- 变化驱动:正交设计
- mybatis xml mapper 文件中 if-else 写法
- 深入探索Scala的Option
- 在Clion的IDE中指定命令行参数
- CentOS6 安装并破解Jira 7
- Martin Odersky访谈录所思
- 解决Boost库链接出错问题
- 引入Option优雅地保证健壮性
- java正则校验,密码必须由字母和数字组成
- Spring Boot集成JasperReports生成PDF文档
- Redux框架reducer对状态的处理
- 使用Spring Cloud Security OAuth2搭建授权服务
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PGSQL分组查询报错
- ConcurrentHashMap#概述
- var、let、const的区别
- IDEA 破解到2099年(202004亲测)
- Flutter基础widgets教程-Chip篇
- 6.超链接-HTML基础
- lombok 表达式的相关特性
- 写给前端程序员的英文学习指南
- 浅谈spring aop的实现原理和实现过程
- Cypress系列(60)- 运行时的截图和录屏
- 请停止使用Excel进行数据分析,升级到Python吧
- git版本控制器的相关操作
- 离线 Android Studio 环境
- Actor:人生如戏全靠演技--“三维度”逻辑编程语言的设计(3) 角色是一种特定的关系名不正言不顺角色才是真正的主人演员的天分再好的演技也需要角色好演员更需要好剧本
- 2.CSS选择器-CSS基础