【剑指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

    给出平面坐标上不在一条直线上三个点坐标 ( 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日
    浏览(35)
  • 剑指offer题解合集——Week4day2

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

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

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

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

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

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

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

    2024年02月09日
    浏览(40)
  • 学习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日
    浏览(101)
  • Nodejs前端学习Day1

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

    2024年01月25日
    浏览(41)
  • 前端学习——ajax (Day1)

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

    2024年02月16日
    浏览(37)
  • 前端学习——JS进阶 (Day1)

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

    2024年02月16日
    浏览(37)
  • Vue3 学习笔记(Day1)

    「写在前面」 本文为尚硅谷禹神 Vue3 教程的学习笔记。本着自己学习、分享他人的态度,分享学习笔记,希望能对大家有所帮助。 目录 0 课程介绍 1 Vue3 简介 2 创建 Vue3 工程 2.1 基于 vue-cli 创建 2.2 基于 vite 创建(推荐) 2.3 一个简单的效果 P1:https://www.bilibili.com/video/BV1Za4y

    2024年02月20日
    浏览(41)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包