【剑指offer】学习计划day1

这篇具有很好参考价值的文章主要介绍了【剑指offer】学习计划day1。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【剑指offer】学习计划day1

【剑指offer】学习计划day1

目录

一. 前言 

二. 用两个栈实现队列

        a.题目

         b.题解分析

          c.AC代码

  二. 包含min函数的栈

         a.题目

         b.题解分析

        c.AC代码 


一. 前言 

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

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

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

    题目编号:JZ09,JZ30

二.

        a.题目

【剑指offer】学习计划day1

         b.题解分析

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

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

【剑指offer】学习计划day1

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

【剑指offer】学习计划day1

          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
};

【剑指offer】学习计划day1

  二. :

         a.题目

【剑指offer】学习计划day1

         b.题解分析

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

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

【剑指offer】学习计划day1

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

【剑指offer】学习计划day1

        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();//辅助栈的栈顶元素即为最小值
    }
};

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

制作不易,能否点个赞再走呢🙏文章来源地址https://www.toymoban.com/news/detail-423641.html

到了这里,关于【剑指offer】学习计划day1的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 百日刷题计划 ———— DAY1

    百日刷题计划 ———— DAY1

    给出平面坐标上不在一条直线上三个点坐标 ( x 1 , y 1 ) , ( x 2 , y 2 ) , ( x 3 , y 3 ) (x_1,y_1),(x_2,y_2),(x_3,y_3) ( x 1 ​ , y 1 ​ ) , ( x 2 ​ , y 2 ​ ) , ( x 3 ​ , y 3 ​ ) ,坐标值是实数,且绝对值不超过 100.00,求围成的三角形周长。保留两位小数。 对于平面上的两个点 ( x 1 , y 1 ) , ( x 2

    2024年02月15日
    浏览(8)
  • 剑指offer题解合集——Week4day2

    题目链接:二叉树中和为某一值的路径 AC代码 思路: 整体思路

    2024年01月15日
    浏览(6)
  • 剑指offer题解合集——Week3day4

    题目链接:二叉树的镜像 AC代码 思路: 整体思路 题目链接:对称的二叉树 AC代码 思路: 整体思路

    2024年02月02日
    浏览(6)
  • 剑指offer题解合集——Week3day6

    题目链接:栈的压入、弹出序列 AC代码 思路: 整体思路 题目链接:不分行从上往下打印二叉树 AC代码 思路: 整体思路

    2024年01月19日
    浏览(9)
  • UWB学习——day1

    UWB学习——day1

    UWB:Ultra Wideband(超宽频) UWB所谓的超宽频区别于其它近场通信技术可总结为 时域上跳跃,频域上矮胖 从图中可以看出,时域上通过短且强的脉冲信号,频域上主要是超宽的频谱(Spectrum) 调制(Modulation):把信号进行编码使其方便传播的过程 PPM 通过在 固定时间范围 内改

    2024年02月09日
    浏览(9)
  • 学习JavaSE基础-day1

    学习JavaSE基础-day1

    JRE 和 JDK JRE:Java运行环境,如果想要运行Java程序至少要安装JRE JDK:Java开发环境(开发工具包),如果要开发Java程序,必须安装JDK JRE = JVM + 核心类库 JDK = JRE + 开发工具包 JDK JRE JVM 关系如图所示:     JDK下载地址:www.oracle.com 配置Path环境变量:希望可以在命令窗口的任意的

    2024年02月07日
    浏览(11)
  • 前端学习——ajax (Day1)

    前端学习——ajax (Day1)

    axios 使用 练习 练习 案例 axios 错误处理 https://apifox.com/apidoc/shared-1b0dd84f-faa8-435d-b355-5a8a329e34a8 url好像失效了

    2024年02月16日
    浏览(9)
  • Nodejs前端学习Day1

    Nodejs前端学习Day1

    妈的,这几天真tm冷,前天上午还下了一整天的雪,大雪 妈的,昨天没学,上午练车去了,下午就当了一下午废物,操,真是个废物。 现在官网的描述: 学习视频中的描述(旧版本): 如果我们写了一段js放到浏览器中运行则证明在做前端开发 如果我们写了一段js放到node

    2024年01月25日
    浏览(8)
  • 前端学习——JS进阶 (Day1)

    前端学习——JS进阶 (Day1)

    局部作用域 全局作用域 作用域链 JS垃圾回收机制 闭包 变量提升 函数提升 函数参数 动态参数 剩余参数 展开运算符 箭头函数(重要) 基本写法 箭头函数参数 箭头函数 this 数组解构 练习 数组解构 对象解构 多级对象解构 for each 案例 筛选

    2024年02月16日
    浏览(11)
  • freertos内核原理学习 Day1(链表)

    freertos内核原理学习 Day1(链表)

    目录 1.freertos列表与列表操作 1.1链表各节点定义(头文件list.h中) 1.1.1普通节点定义 1.1.2mini节点定义 1.1.3根节点定义 1.2链表操作(源文件list.c中) 1.2.1链表节点初始化  1.2.2链表根节点初始化   1.2.3插入节点到链表尾部   1.2.4将节点按“升序”排列后插入到链表中   1.2.

    2024年01月23日
    浏览(8)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包