【剑指offer】学习计划day1

news2024/11/18 18:33:19

目录

一. 前言 

二. 用两个栈实现队列

        a.题目

         b.题解分析

          c.AC代码

  二. 包含min函数的栈

         a.题目

         b.题解分析

        c.AC代码 


一. 前言 

 本系列是针对Leetcode中剑指offer学习计划的记录与思路讲解。详情查看以下链接:

剑指offer-学习计划https://leetcode.cn/study-plan/lcof/?progress=x56gvoct

    本期是本系列的day1,话不多说,让我们来看看今天的主题----》栈与队列(简单)

    题目编号:JZ09,JZ30

二. 用两个栈实现队列

        a.题目

         b.题解分析

        是不是很熟悉?这题在之前【刷题篇】栈和队列 中有碰到过,我们当时分析了使用一个栈和使用两个栈实现的可行性,发现如果我们采用就地存储,只使用一个栈,是无法达到我们的目的。而本题很明确的告诉了我们使用两个栈来实现,我们也就不需要考虑这么多了。

        好嘞,让我们简单回忆以下之前的思路(又开始凑字数了):由于队列的特性是先进先出,栈的特性是后进先出,所以我们对队头进行删除操作必须先将前n-1个元素出栈后才能删除---》

解题方法是将一个栈用来存放入队的元素(input),而另一个栈则用来出队(output) 。对于入队操作,则往input入栈;而对于出队操作,如果ouput为空,则先将input中的元素全部压入output中,此时output的栈顶元素恰好就是队头元素,然后出栈即可,如果不为空,则直接出栈。动态演示如下:

          c.AC代码

class CQueue {
public:
    stack<int> input;
    stack<int> output;
    CQueue() {

    }
    //入队
    void appendTail(int value) 
    {
        //往input入栈
        input.push(value);
    }
    //出队
    int deleteHead() 
    {
        //output为空,先将input数据移入
        if (output.empty())
        {
            if(input.empty())
            {
                //input也为空,队列为空,返回-1
                return -1;
            }
            while (!input.empty())
            {
                int val = input.top();
                input.pop();
                output.push(val);
            }
        }//end of if
        //此时output栈顶元素即为队头元素,出栈
        int ret = output.top();
        output.pop();
        return ret;
    }//end of fun
};

  二. 包含min函数的栈

         a.题目

         b.题解分析

        由于栈是限制型数据结构,因此我们无法对其进行遍历求最小值。所以我们每次操作时需要一并对最小值进行维护。

        本题的思路是:再构建一个辅助栈来存储最小值,最小栈 中的每个元素对应栈的每个状态时的最小值。例如:最小栈的栈底元素对应栈只有一个元素时的最小值,最小栈栈底元素的上一个元素对应栈有两个元素时的最小值,以此类推:

         这样,栈顶元素就是当前栈的最小值。当我们进行入栈时,我们就将栈顶元素和入栈元素进行比较,同步将当前最小值压入辅助栈中,保证栈顶元素始终为栈的最小值。而当我们进行出栈时,我们同步将辅助栈进行出栈,出栈后辅助栈的栈顶元素恰好就是当前状态栈的最小值。演示如下:

        c.AC代码 

class MinStack {
    stack<int> s1;
    stack<int> minstack;//存储最小值的辅助栈
public:
    /** initialize your data structure here. */
    MinStack() {
        minstack.push(INT_MAX);
    }
    //入栈
    void push(int x) 
    {
        s1.push(x);
        minstack.push(std::min(x,minstack.top()));//同步将最小值压入辅助栈
    }
    //出栈
    void pop() {
        if(s1.empty())
        {
            return;
        }
        s1.pop();
        minstack.pop();//同步对辅助栈进行出栈
    }
    //求栈顶元素
    int top() {
        return s1.top();
    }
    //求最小值
    int min() {
        return minstack.top();//辅助栈的栈顶元素即为最小值
    }
};

以上,就是本期的全部内容啦🌸

制作不易,能否点个赞再走呢🙏

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

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

相关文章

Java八大基本数据类型

Java八大基本数据类型 byteshortintlongfloatdoublebooleanchar byte byte数据类型是8位、有符号的&#xff0c;以二进制补码表示的整数 最小值是-128&#xff08;-2^7&#xff09;&#xff1b; 最大值是127&#xff08;2^7-1&#xff09;; 默认值是0&#xff1b; byte类型用在…

stm32读写内部Flash

stm32内部flash地址架构映射 因为我的stm32f407的内部flash是1M的所以块2不存在&#xff0c;但他的地址仍然存在&#xff0c;只是没有作用&#xff0c;这是stm32的整体框架。 主存储器 一般我们说 STM32 内部 FLASH 的时候&#xff0c;都是指这个主存储器区域&#xff0c;它…

duilib窗口拖动

直接使用如下就可以了&#xff0c;不用再使用继承。 LRESULT CXmlWnd::OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) {POINT pt;RECT rcClient;RECT rcCaption;CControlUI * pControl NULL;rcCaption m_P…

C++练级之初级:第五篇

C练级之初级&#xff1a;第五篇 第五篇 C练级之初级&#xff1a;第五篇1.auto关键字2.for循环改进3.指针空值nullptr4.内联函数4.1内联函数的概念4.2内联函数的注意点 总结 1.auto关键字 &#x1f914;什么是auto(automatic的缩写&#xff0c;自动的意思)关键字&#xff1f; au…

OpenShift 4 - 在 CI/CD Pipeline 中创建 KubeVirt 容器虚拟机 - 方法1+2 (视频)

《OpenShift / RHEL / DevSecOps 汇总目录》 说明&#xff1a;本文已经在支持 OpenShift 4.12 的 OpenShift 环境中验证 文章目录 准备环境安装可实现 KubeVirt 操作的 Tekton 资源创建密钥对 在 CI/CD 流水线管道中创建 VM方法1&#xff1a;通过 Manifest 任务创建 VM方法2&am…

如何实现Spring AOP以及Spring AOP的实现原理

AOP:面向切面编程,它和OOP&#xff08;面向对象编程)类似。 AOP组成: 1、切面:定义AOP是针对那个统一的功能的&#xff0c;这个功能就叫做一个切面&#xff0c;比如用户登录功能或方法的统计日志&#xff0c;他们就各种是一个切面。切面是有切点加通知组成的。 2、连接点:所有可…

ClickHouse快速入门

目录 1 ClickHouse介绍1.1 ClickHouse 的特点1.1.1 列式存储1.1.2 DBMS 的功能1.1.3 多样化引擎1.1.4 高吞吐写入能力1.1.5 数据分区与线程级并行1.1.6 性能对比 2 数据类型2.1 整型2.2 浮点型2.3 布尔型2.4 Decimal 型2.5 字符串2.6 枚举类型2.7 时间类型2.8 数组 3 表引擎3.1…

SpringBoot tomcat核心参数

server.tomcat.threads.min-spare10server.tomcat.threads.max200server.tomcat.max-connections8192server.tomcat.accept-count100 第一个参数代表程序启动就会开启10个线程。 如果我改成20个&#xff0c;看看什么情况&#xff0c;可以看到初始化了20个线程 看第二个参数&am…

2022年中国云市场份额:阿里云腾讯云下降

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 4月23日&#xff0c;IDC发布《中国公有云服务市场(2022下半年)跟踪》&#xff0c;占据前四的分别为阿里云(40.6%)、华为云(11.0%)、腾讯云(11.0%)、中国电信(8.7%)。咱们说重点&#xff0c;如下图所…

DFMEA 在车用燃料电池空压机设计中的应用

摘要&#xff1a; DFMEA在空压机研发中的应用 氢气具有资源丰富、热值高和无污染等特点&#xff0c;因而是燃料电池汽车最理想的二次能源。空压机作为燃料电池汽车的关键总成&#xff0c;掌握其核心部件的设计和制造技术非常必要。应用传统的设计方法进行相关零部件如空气轴承…

D3.js(2) Data-Join

什么是Data-Join&#xff1f; 本质上是将数据与图元绑定 可以省去大量根据数据设置图元属性的代码量&#xff0c;对动态变化的数据提供统一接口 D3.js绑定数据的三个状态 Enter 数据数量>图元数量&#xff0c;d3.js会根据新增的数据生成相应的图元 给不存在数据绑定的图…

跨境电商服务简单说明

​ 前言 跨境电商服务是指通过互联网平台进行国际贸易的一种新型商业模式&#xff0c;涉及跨境物流、跨境支付、跨境电商平台等多个领域。随着全球化的不断推进和消费者需求的不断变化&#xff0c;跨境电商服务行业呈现出快速发展的趋势。 发展背景 跨境电商服务行业的发展背景…

基于ArcGIS Pro、R、INVEST等多技术融合下生态系统服务权衡与协同动态分析

生态系统服务是指生态系统所形成的用于维持人类赖以生存和发展的自然环境条件与效用&#xff0c;是人类直接或间接从生态系统中得到的各种惠益。联合国千年生态系统评估&#xff08;Millennium ecosystem assessment&#xff0c;MA&#xff09;提出生态系统服务包括供给、调节、…

JavaScript 函数调用和JavaScript 闭包

文章目录 一、JavaScript 函数调用二、JavaScript 闭包总结 一、JavaScript 函数调用 JavaScript 函数有 4 种调用方式。 每种方式的不同在于 this 的初始化。 this 关键字 一般而言&#xff0c;在Javascript中&#xff0c;this指向函数执行时的当前对象。 注意 this 是保留…

美创科技首届渠道高峰论坛| 两大分论坛亮点汇聚

4月22日&#xff0c;美创科技首届渠道高峰论坛在海南三亚隆重举行&#xff0c;本届高峰论坛以“新起点 新战略 共赢数安蓝海”为主题&#xff0c;全国各地200余家合作伙伴齐聚。当日下午&#xff0c;行业分论坛、技术分论坛两大论坛以及圆桌会议&#xff0c;多方视角、全方位共…

C++篇----auto、内联函数、函数重载

文章目录 一、auto二、内联函数&#xff08;inline)三、函数重载 一、auto auto在c中是会根据等号右边表达式自动推导等号左边的类型 #include<iostream> using namespace std;int main() {int a 0;auto b a;double c 1.1;auto d c;//打印类型typeid().name()cout &l…

OpenGL与Metal API的Point Sprite

我们在实际用OpenGL等3D图形渲染API时 点图元 往往用得不多&#xff0c;而在粒子系统中可能也是用一个正方形来绘制一单个粒子。不过在当前大部分3D图形渲染API中都能支持用点图元来绘制一个具有纹理贴图的粒子&#xff0c;从早在OpenGL 1.4开始就能支持了&#xff0c;而在Open…

机器学习:基于逻辑回归(Logistic Regression)对股票客户流失预测分析

基于逻辑回归对股票客户流失预测分析 作者&#xff1a;i阿极 作者简介&#xff1a;Python领域新星作者、多项比赛获奖者&#xff1a;博主个人首页 &#x1f60a;&#x1f60a;&#x1f60a;如果觉得文章不错或能帮助到你学习&#xff0c;可以点赞&#x1f44d;收藏&#x1f4c1…

npm install报错

出现这个错误&#xff0c;我百度之后得到的解决方案是&#xff1a; 在node.js安装目录下找到node_modules文件夹并删除 但是当我操作完成之后&#xff0c;却出现了另外一个ERROR&#xff1a; 于是我又还原了原来的node_modules文件夹&#xff0c;于是又报一开始的错 仔细瞅瞅…

Netty 单机百万连接测试

1.Netty框架简介 1.1.Netty简介 netty是jboss提供的一个java开源框架&#xff0c;netty提供异步的、事件驱动的网络应用程序框架和工具&#xff0c;用以快速开发高性能、高可用性的网络服务器和客户端程序。也就是说netty是一个基于nio的编程框架&#xff0c;使用netty可以快…