0
点赞
收藏
分享

微信扫一扫

SLAM论文速递【SLAM—— 基于平面特征的动态SLAM—4.24(2)

目录

一. 前言 

二. 用两个栈实现队列

        a.题目

         b.题解分析

          c.AC代码

  二. 包含min函数的栈

         a.题目

         b.题解分析

        c.AC代码 


一. 前言 

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

    题目编号:JZ09,JZ30

二. 用两个栈实现队列

        a.题目

         b.题解分析

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

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

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

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

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

举报

相关推荐

0 条评论