首页 > 其他分享 >设计一个有getMin功能的栈

设计一个有getMin功能的栈

时间:2023-09-02 19:33:32浏览次数:36  
标签:功能 压入 元素 栈顶 stackMin getMin stackData 设计 newNum

一 题目

实现一个特殊的栈,实现栈的基本功能并实现返回栈中最小元素的操作。

二 要求

1、pop、push、getMin操作时间复杂度都是O(1)

2、设计的栈类型可以使用现成的栈结构

三 分析

我们可以使用两个栈,一个用来保存当前栈中的元素,其功能为正常的栈,记为stackData;另外一个用于保存每一步中的最小值,记为stackMin。

四 设计思路

4.1 压入规则

设当前数据为newNum,先将其压入stackData;

然后判断stackMin是否为空:

1.为空则将newNum压入stackMin中

2.不为空则比较newNum和stackMin栈顶元素哪一个更小

2.1如果newNum更小或者两者相等,则newNum也压入stackMin中;

2.2如果stackMin更小,则stackMin不压入任何内容;

4.2 弹出规则

1.先弹出stackMin栈顶元素,记为value

2.然后比较value和stackMin栈顶元素(记为min)的大小:

2.1 value == min,则stackMin弹出栈顶元素;

2.2否则stackMin不弹出任何内容。

4.3 查询栈中最小值操作

由压入和弹出规则可知,stackMin栈顶始终保存着stackData中最小的元素,所以只需要弹出栈顶元素即可。

五 代码实现

public class MyStack{
		private Stack<Integer> stackData;
    	private Stack<Integer> stackMin;
        
        public MyStack(){
        	this.stackData = new Stack<Integer>;
            this.stackMin = new Stack<Integer>;
        }
        
        public void push(int newNum){
        	if(this.stackMin.isEmpty()){
            	this.stackMin.push(newNum);
            }else if(newNum <= this.getMin()){
            	this.stackMin.push(newNum);
            }
            this.stackData.push(newNum);
        }
        
        public int pop(int newNum){
        	if(this.stackData.isEmpty()){
            	throw new RuntimeException("stackData is empty!");
            }
            int value = this.stackData.pop();
            if(value == this.getMin()){
            	this.stackMin.pop();
            }
            return value;
        }
        
        public void getMin(){
        	if(this.stackMin.isEmpty()){
            	throw new RuntimeException("stackMin is empty!");
            }
            return this.stackMin.pop();
        }
    
    
}


标签:功能,压入,元素,栈顶,stackMin,getMin,stackData,设计,newNum
From: https://blog.51cto.com/u_16244372/7334642

相关文章

  • wangEditor增加源码模式,添加查看源码功能
    wangEditor是一款轻量级的富文本编辑器。使用还比较方便,但是缺少查看源码模式,需要我们自定义一个menu给增加查看源码模式下面是wangEditor增加源码模式的代码:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="......
  • EasyPlayer开放外部录像接口:自由扩展H.265网页播放功能
    EasyPlayer通过实现视频实时录像功能,不仅提供轻量化、便捷化的视频资源下载能力,同时有效减少了带宽和计算资源的消耗。这种创新的功能使得用户可以灵活地获取所需的视频数据,为其节省使用成本并提升整体效率。今天我们来分享一下EasyPlayer播放器对外开放录像的方法。1)在播放器内部......
  • 基于ASP的网上选课系统的设计与实现-计算机毕业设计源码+LW文档
    一、选题的目的和意义目的:网上选课系统的开发是为了更好的让各个高校充分的利用校园网的软硬件资源,通过B/S架构来实现网上选课系统,实现了网上选课系统的无纸化管理,让网上选课系统、查询课程更为方便,让导师审核选课更加快捷。意义:网上选课系统使学生足不出户就能够提交选课,有效的......
  • 忻州师院毕业论文管理系统的设计与实现-计算机毕业设计源码+LW文档
    一、选题的目的和意义目的:忻州师院毕业论文管理系统的开发是为了更好的让各个高校充分的利用校园网的软硬件资源,通过B/S架构来实现忻州师院毕业论文管理系统,管理毕业论文信息,老师可以在线查询毕业论文进程,节省时间,提高效率。意义:本文研发的忻州师院毕业论文管理系统结合高校具体的......
  • 基于ASP的人才招聘管理系统的设计与实现-计算机毕业设计源码+LW文档
    一、选题的目的和意义目的:基于ASP的人才招聘管理系统的开发是为了提高企业的工作效率,减少企业员工的工作量以及相应的时间,节省一些不必要的开支,从而让求职者可以更快的找到工作,企业快速的挖掘人才。人才招聘管理系统不仅能为经营者提供相对应的市场信息,并且能够随时掌握市场的发展......
  • 基于Android的红马国旅网上旅行社APP的设计与开发-计算机毕业设计源码+LW文档
    一、选题的目的和意义目的:基于Android的红马国旅网上旅行社APP是为了游客提供个性化的服务。用户注册登录APP后可根据自己的意向查询相关景点的攻略信息,还可将这些信息分享至微信、QQ、新浪微博等社交平台。合理规划自己的时间,出行前先做好攻略,查清楚景点的地理位置、营业时间、公......
  • 芦芽山旅游资源管理系统的设计与实现-计算机毕业设计源码+LW文档
    一、选题的目的和意义: 本课题拟开发一个基于java的芦芽山旅游资源管理系统,开发的主要目标是通过芦芽山旅游资源管理系统,提供有用的信息数据,为旅游者提供可靠的旅游信息,对推动地方旅游业的发展具有积极有效的促进作用。本芦芽山旅游资源管理系统主要包括景点展示、酒店查看、在线......
  • Xshell永久安装完全指南:畅享所有高级功能
    前言Xshell是一款功能强大的SSH远程终端客户端。Xshell支持远程协议Telnet、Rlogin、SSH/SSHPKCS,主要用于在Windows系统上远程操控服务器进行工作以及统一管理多台服务器集群,它通过多种不同的连接协议和密码,保障着用户的连接服务器安全。一、安装xshell安装包在文末附带,并提供了免......
  • 基于Android的组成原理在线课堂APP的设计与开发-计算机毕业设计源码+LW文档
    一、选题的目的和意义目的:基于Android的组成原理在线课堂APP是为了使教学管理工作系统化、规范化、自动化,从而达到提高课堂管理效率的目的。能够解决目前考勤管理效率、无法准确的统计出学生课程成绩等信息,而且系统开发价格便宜、后期维护成本极低。便于教师利用本系统更好的交流......
  • 如何设计安全的 Web API
    如何设计安全的WebAPI?当我们向用户开放WebAPI访问时,我们需要确保每个API调用都经过身份验证。这意味着用户必须是他们声称的人。在这篇文章中,我们探讨了两种常见的方法:1.基于令牌的身份验证2.HMAC(基于哈希的消息认证码)认证下图说明了它们的工作原理。基于Token......