Leetcode-每日一题【剑指 Offer 30. 包含min函数的栈】

news2024/11/26 5:32:02

题目

定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。

示例:

MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.min();   --> 返回 -3.
minStack.pop();
minStack.top();      --> 返回 0.
minStack.min();   --> 返回 -2.

提示:

  1. 各函数的调用总次数不超过 20000 次

解题思路

1.题目要求我们实现一个能够得到栈的最小元素的 min 函数,且调用 min、push 及 pop 的时间复杂度都是 O(1)。我们需要用到两个栈去解决这个问题。

2.举个例子:

下面我们开始进行入栈操作,在入栈第一个元素时Stack1直接入栈,而当Stack2为空时我们也将元素直接入栈。

 在入栈第二个元素时Stack1依旧直接入栈,这时我们发现要入栈的元素大于Stack2的栈顶元素,所以我们不对Stack2进行入栈操作,

以下入栈操作的思路相同,Stack1正常入栈,Stack2只有在空的时候或者栈顶元素大于被入栈元素时才进行入栈。

 此时入栈操作全部执行结束,我们来看看出栈操作,

在出栈操作时,我们需要先判断Stack1是否为空,要保证我们有元素可以出栈,当Stack1不为空时,Stack2一定也不为空。然后我们将Stack1的栈顶元素与Stack2的栈顶元素进行比较,若两元素不同,则只将Stack1进行出栈,否则就要将Stack1和Stack2同时出栈。

出栈操作执行结束。

3,还有最后两个方法,pop()求栈顶元素时我们只需要返回Stack1的栈顶即可,min()求栈中最小元素时我们只需要返回Stack2的栈顶元素即可。 

代码实现

class MinStack {
    Stack<Integer> Stack1;
    Stack<Integer> Stack2;


    /** initialize your data structure here. */
    public MinStack() {
        Stack1 = new Stack();
        Stack2 = new Stack();
    }
    
    public void push(int x) {
        Stack1.push(x);
        if(Stack2.isEmpty() || x <= Stack2.peek() ){
            Stack2.push(x);
        }
    }
    
    public void pop() {
        if(!Stack1.isEmpty()){
            //数值大于 127,比较的就是一个对象
            if(Stack1.peek().intValue() == Stack2.peek().intValue()){
                Stack2.pop();
            }
            Stack1.pop();
        }
    }
    
    public int top() {
        return Stack1.peek();
    }
    
    public int min() {
        return Stack2.peek();
    }
}

测试结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/875946.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1+X Web前端开发职业技能等级证书建设方案

一 、系统概述 1X Web前端开发技术是计算机类专业重要的核心课程&#xff0c;课程所包含的教学内容多&#xff0c;实践性强&#xff0c;并且相关技术更新快。传统的课堂讲授模式以教师为中心&#xff0c;学生被动式接收&#xff0c;难以调动学生学习的积极性和主动性。混合式教…

C语言指针笔试真题整理(8道)

前言 本篇文章整理了一些指针的笔试题&#xff0c;适合初学者以及对于指针掌握并不是很牢固的朋友阅读&#xff0c;当然&#xff0c;大佬想做着玩的话可以看一看第八题~ 分类&#xff1a;循序渐进的难度&#xff1a;前三题和第七题是简单题&#xff0c;第四题有陷阱&#xff…

什么是Web应用程序防火墙,WAF与其他网络安全工具差异在哪?

一、什么是Web 应用程序防火墙 (WAF) &#xff1f; WAF软件产品被广泛应用于保护Web应用程序和网站免受威胁或攻击&#xff0c;它通过监控用户、应用程序和其他互联网来源之间的流量&#xff0c;有效防御跨站点伪造、跨站点脚本&#xff08;XSS攻击&#xff09;、SQL注入、DDo…

最新版本 Stable Diffusion 开源 AI 绘画工具之 VAE 篇

✨ 目录 &#x1f388; 什么是VAE&#x1f388; 开启VAE&#x1f388; 下载常见的VAE&#x1f388; 对比不同VAE生成的效果 &#x1f388; 什么是VAE VAE&#xff1a;是 Variational Auto-Encoder 的简称&#xff0c;也就是变分自动编码器可以把它理解成给图片加滤镜&#xff…

ChatGPT or BingChat

你相信我们对大模型也存在「迷信权威」吗&#xff1f; ChatGPT 的 GPT-4 名声在外&#xff0c;我们就不自觉地更相信它&#xff0c;优先使用它。但我用 ChatALL 比较 AI 大模型们这么久&#xff0c;得到的结论是&#xff1a; ChatGPT GPT-4 在大多数情况下确实是最强&#xf…

【elementUi】绘制自定义表格、绘制曲线表格

要求绘制下图系列表格&#xff1a; 实现步骤: 1.绘制树&#xff0c;实现树勾选字段—>表格绘制字段 逻辑&#xff1a; 树&#xff1a;check-change“treeChart.handleCheckChange” 绑定点击选择事件&#xff0c;改变data.column3数据项&#xff1b;表格:columns"data…

Unity智慧园区夜景制作

近期使用Unity做了一个智慧园区场景的demo&#xff0c;初步了解了3D开发的一些步骤和知识&#xff0c;以下为制作的步骤&#xff0c;比较简略&#xff0c;备忘&#xff1a; 1. 制作前的设计分析&#xff1a; 1. 分析日光角度&#xff0c;阴影长度&#xff0c;效果 2. 分析冷暖…

Idea 快捷键整理

Idea快捷键和自动代码补全汇总 idea快捷键汇总 Ctrl 快捷键说明Ctrl F在当前文件进行文本查找 &#xff08;必备&#xff09;Ctrl R在当前文件进行文本替换 &#xff08;必备&#xff09;Ctrl Z撤销 &#xff08;必备&#xff09;Ctrl Y删除光标所在行 或 删除选中的行 &am…

双向最佳路径优先搜索算法

概念 双向最佳优先搜索&#xff08;Bidirectional Best-First Search&#xff09;是一种图搜索算法&#xff0c;用于在给定的图或树中找到两个节点之间的最短路径。该算法尝试从起始节点和目标节点同时扩展搜索&#xff0c;直到两个搜索方向相遇。 双向最佳优先搜索的步骤如下…

Rx.NET in Action 第三章学习笔记

3 C#函数式编程思想 本章内容包括 将 C# 与函数式技术相结合使用委托和 lambda 表达式使用 LINQ 查询集合 面向对象编程为程序开发提供了巨大的生产力。它将复杂的系统分解为类&#xff0c;使项目更易于管理&#xff0c;而对象则是一个个孤岛&#xff0c;你可以集中精力分别处理…

table 根据窗口缩放,自适应

element-plus中&#xff0c;直接应用在页面样式上&#xff0c; ::v-deep .el-table{width: 100%; } ::v-deep .el-table__header-wrapper table,::v-deep .el-table__body-wrapper table{width: 100% !important; } ::v-deep .el-table__body,::v-deep .el-table__footer,::v-d…

试卷转电子版怎样处理?分享个好用的扫描转换方法

试卷转电子版是一个常见的需求&#xff0c;可以通过扫描纸质试卷来实现。但是&#xff0c;扫描后的文件可能会有一些问题&#xff0c;例如模糊、颜色失真、文字识别错误等。在这篇文章中&#xff0c;我将分享一个好用的扫描转换方法&#xff0c;可以帮助您快速而准确地将试卷转…

Spring 中 @Qualifier 注解还能这么用?

文章目录 1. 基本用法1.1 指定 Bean 名称1.2 不指定 Bean 名称1.3 自定义注解1.4 XML 中的配置 2. 源码分析2.1 doResolveDependency2.2 findAutowireCandidates 3. 小结 今天想和小伙伴们聊一聊 Qualifier 注解的完整用法&#xff0c;同时也顺便分析一下它的实现原理。 说到 Q…

【运维知识高级篇】超详细的Jenkins教程1(安装部署+配置插件+创建自由风格项目+配合gitlab实现Jenkins自动触发)

Jenkins是一个开源软件项目&#xff0c;是基于Java开发的一种持续集成的工具&#xff0c;用于监控持续重复的工作&#xff0c; 旨在提供一个开放易用的平台&#xff0c;使软件的持续集成变成可能&#xff0c;是持续集成的核心&#xff0c;可以与其他软件进行协作&#xff0c;例…

为什么骑友对太过商业化的景点如此反感?

一骑友小李最近在社交媒体上分享了他的旅行经历。他去了一个著名的景点&#xff0c;原本期待满满&#xff0c;却发现这个曾经心中的旅行圣地已经变得过分商业化。小卖部、纪念品摊位、过度开发的风景……让他感到十分失望。他的故事引发了骑友们的热议&#xff0c;很多人表示深…

vue.draggable浅尝

介绍 Vue.Draggable是一款基于Sortable.js实现的vue拖拽插件。支持移动设备、拖拽和选择文本、智能滚动&#xff0c;可以在不同列表间拖拽、不依赖jQuery为基础、vue 2过渡动画兼容、支持撤销操作&#xff0c;总之是一款非常优秀的vue拖拽组件。本篇将介绍如何搭建环境及简单的…

网工最常犯的9大错误,越早知道越吃香

下午好&#xff0c;我的网工朋友 我们常说&#xff0c;人要学会避免错误&#xff0c;尤其是对在职场生活的打工人来说&#xff0c;更是如此。 学生时代&#xff0c;我们通过错题本收集错误&#xff0c;提高刷题正确率和分数&#xff0c;但到了职场&#xff0c;因为没有量化的…

2023年京东宠物食品行业数据分析(京东大数据)

宠物食品市场需求主要来自于养宠规模&#xff0c;近年来由于我国宠物数量及养宠人群的规模均在不断扩大&#xff0c;宠物相关产业和市场规模也在蓬勃发展&#xff0c;宠物食品市场也同样保持正向增长。 根据鲸参谋电商数据分析平台的相关数据显示&#xff0c;2023年1月-7月&am…

Live Market:个人如何做跨境电商?带你从0到1了解跨境电商

跨境电商是指通过互联网技术&#xff0c;将商品从一个国家或地区销售到另一个国家或地区的商业活动。为消费者提供更加丰富、优质、实惠的商品选择&#xff0c;促进国际贸易的发展和经济的繁荣。跨境电商还可以帮助企业降低成本&#xff0c;提高效率&#xff0c;提升品牌知名度…

创建一个 React+Typescript 项目

接下来 我们来一起探索一下用TypeScript 来编写react 这也是一个非常好的趋势&#xff0c;目前也非常多人使用 那么 我们就先从创建项目开始 首先 我们先找一个 或者 之前创建一个目录 用来放我们的项目 然后 在这个目录下直接输入 例如 这里 我想创建一个叫 tsReApp 的项目…