首页 > 编程语言 >算法练习-day9

算法练习-day9

时间:2023-06-16 15:02:00浏览次数:40  
标签:tmp arr 元素 day9 队列 练习 int 算法 empty

栈和队列

232. 用栈实现队列

题意:请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty)

实现 MyQueue 类:

  1. void push(int x) :将元素 x 推到队列的末尾
  2. int pop() :从队列的开头移除并返回元素
  3. int peek() :返回队列开头的元素
  4. boolean empty(): 如果队列为空,返回 true ;否则,返回 false

示例:

算法练习-day9_栈和队列

       思路:我们需要使用两个栈来模拟队列,arr和tmp;其中arr表示入队列的元素,tmp表示出队列的元素,当需要取出元素时,我们就将元素全部转移到tmp中,这样就可以使原本倒叙的元素再次变为正序,并且当我们再次取出元素时,只需要判断tmp是否为空,若不为空,直接在tmp中读取数据即可

C++代码:

class MyQueue {
public:
    MyQueue() {
    }
    
    void push(int x) {
        arr.push(x);
    }
    
    int pop() {
        if(tmp.empty())//当tmp为空时,才会为出队列栈添加元素
        {
            while(!arr.empty())
            {
                tmp.push(arr.top());
                arr.pop();
            }
        }
        int sum=tmp.top();//取出队列的首元素
        tmp.pop();
        return sum;
    }
    
    int peek() {
        if(tmp.empty())
        {
            while(!arr.empty())
            {
                tmp.push(arr.top());
                arr.pop();
            }
        }
        return tmp.top();//只需要返回队列的首元素
    }
    
    bool empty() {
        return arr.empty()&&tmp.empty();//两个栈都代表队列中的元素,因此需要判断是否为空
    }
private:
    stack<int> arr;//入队列栈
    stack<int> tmp;//出队列栈
};

225. 用队列实现栈

题意:请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)

实现 MyStack 类:

  1. void push(int x):将元素 x 压入栈顶。
  2. int pop():移除并返回栈顶元素。
  3. int top():返回栈顶元素。
  4. boolean:empty() 如果栈是空的,返回 true ;否则,返回 false 。

示例:

算法练习-day9_栈和队列_02

       思路:本题定义了两个队列:arr和tmp,arr是入栈的队列,就是简单的元素入栈,而tmp主要起到临时队列的作用,我们将arr中存在的元素转移到tmp中,当tmp中元素为最后一个时,无需转移,直接移除,并保存值,然后再让tmp中元素原路返回arr中,最后返回,而实现top和empty就更简单了,由于我们规定的是arr为栈的存储队列,因此只需要调用arr的back和empty就可以得到我们想要的答案了

C++代码:

class MyStack {
public:
    MyStack() {
    }
    
    void push(int x) {
        arr.push(x);
    }
    
    int pop() {
        int sum=0;
        while(!arr.empty())//这里我们固定arr为入栈队列,因此,在最后我们要将临时队列的全部元素再放回arr中
        {
            sum=arr.front();
            arr.pop();
            if(!arr.empty())//当取出最后一个元素arr为空时,就说明这个元素就相当于栈顶元素,无需放入tmp中存储,已经被移除
            {
                tmp.push(sum);
            }
        }
        while(!tmp.empty())
        {
            arr.push(tmp.front());
            tmp.pop();
        }
        return sum;
    }
    
    int top() {
        return arr.back();
    }
    
    bool empty() {
        return arr.empty();
    }
private:
    queue<int> arr;//入栈队列
    queue<int> tmp;//临时队列
};

标签:tmp,arr,元素,day9,队列,练习,int,算法,empty
From: https://blog.51cto.com/u_15209404/6499831

相关文章

  • python基础语法练习题
    """一、必做题1、下面变量名正确的是(ABD)A.nameB.num1C.1_numD.name_A_12、Python不支持的数据类型有(A)A、charB、intC、floatD、list3、python源程序执行的方式(B)A编译执行B解析执行C直接执行D边编译边执行4、Python语言语句块的标记是(C)A分号B......
  • 深度学习实践篇[17]:模型压缩技术、模型蒸馏算法:Patient-KD、DistilBERT、DynaBERT、Ti
    深度学习实践篇[17]:模型压缩技术、模型蒸馏算法:Patient-KD、DistilBERT、DynaBERT、TinyBERT1.模型压缩概述1.2模型压缩原有理论上来说,深度神经网络模型越深,非线性程度也就越大,相应的对现实问题的表达能力越强,但相应的代价是,训练成本和模型大小的增加。同时,在部署时,大模型预测......
  • k均值聚类算法_异常数据检测
    k均值聚类_异常检测先来张图,快速理解正常数据应该分布在两个簇中异常数据,距离两个簇都很远fromsklearn.clusterimportKMeansfromscipy.spatial.distanceimportcdistimportnumpyasnpimportmatplotlib.pyplotaspltif__name__=='__main__':#正常......
  • 代码随想录算法训练营第八天| 28. 实现 strStr() 459.重复的子字符串
    28.实现strStr()  难点:1,制作KMP算法2,next数组要求的是,找到的下标:0/s[i]==s[j]才可以跳出来代码:1vector<int>getNextList(stringneedle)2{3vector<int>next(needle.size());4intj=0;5next[0]=0;67for(inti=1;i......
  • 学不会的高精度算法
    前言在洛谷水题的时候发现本蒟蒻是连高精度都不会的蒟蒻中的蒟蒻,所以想要浅浅学习一下什么是高精度算法高精度算法(HighAccuracyAlgorithm)是处理大数字的数学计算方法。在一般的科学计算中,会经常算到小数点后几百位或者更多,当然也可能是几千亿几百亿的大数字。一般这类数字我......
  • 算法——树(二)
    1、路径总和给你二叉树的根节点 root和一个表示目标和的整数 targetSum。判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和 targetSum。如果存在,返回true;否则,返回false。1classSolution{2booleanhaspath=false;3p......
  • 【学习笔记】Primal-Dual 原始对偶算法
    Johnson全源最短路算法Floyd可以\(O(n^3)\)处理全源最短路,Bellman-Ford单源最短路的复杂度是\(O(nm)\)的,Dijkstra可以做到\(O(m\logm)\)但不能处理负边权,所以Johnson全源最短路算法通过处理使得可以用\(n\)次Dijkstra解决有负权图的全源最短路。先建超级源点,向......
  • 算法练习-day8
    字符串28.找出字符串中第一个匹配项的下标题意:给你两个字符串haystack和needle,请你在haystack字符串中找出needle字符串的第一个匹配项的下标(下标从0开始)。如果needle不是haystack的一部分,则返回-1。示例:    思路:本题有两种思路:1.暴力求解法,只需要一次遍历,以i为haystack字......
  • 算法——树(一)
    1、中序遍历递归classSolution{List<Integer>ans=newArrayList<>();publicList<Integer>inorderTraversal(TreeNoderoot){inorder(root);returnans;}publicvoidinorder(TreeNoderoot){if(root!=nul......
  • JDBC练习-添加
      /**添加*1.insertintotb_brand(brand_name,company_name,ordered,description,status)values(?,?,?,?,?);*2.参数:需要id之外所有参数信息*3.结果:boolean**/@TestpublicvoidtestBrand1()throwsException{......