首页 > 其他分享 >力扣232 用栈实现队列

力扣232 用栈实现队列

时间:2022-12-27 19:57:40浏览次数:33  
标签:MyQueue 队列 pop 力扣 int 用栈 push stackOut 232

题目:

请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):
实现 MyQueue 类:
    void push(int x) 将元素 x 推到队列的末尾
    int pop() 从队列的开头移除并返回元素
    int peek() 返回队列开头的元素
    boolean empty() 如果队列为空,返回 true ;否则,返回 false

 说明:

  • 只能 使用标准的栈操作 —— 也就是只有push to toppeek/pop from topsize, 和is empty操作是合法的。
  • 所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。

示例:

输入:
["MyQueue", "push", "push", "peek", "pop", "empty"]
[[], [1], [2], [], [], []]
输出:
[null, null, null, 1, 1, false]

解释:
MyQueue myQueue = new MyQueue();
myQueue.push(1); // queue is: [1]
myQueue.push(2); // queue is: [1, 2] (leftmost is front of the queue)
myQueue.peek(); // return 1
myQueue.pop(); // return 1, queue is [2]
myQueue.empty(); // return false

思路:

用两个栈模拟队列操作

class MyQueue {
    Stack<Integer> stackIn;
    Stack<Integer> stackOut;
    public MyQueue() {
        stackIn = new Stack<>(); // 负责进栈
        stackOut = new Stack<>(); // 负责出栈
    }
    
    public void push(int x) {// 将元素 x 推到队列的末尾
        stackIn.push(x);//入栈
    }
    
    public int pop() {//从队列的开头移除并返回元素
        if (stackOut.isEmpty()){//当出栈为空时,要把入栈的所有元素都入出栈
            while (!stackIn.isEmpty()){
                stackOut.push(stackIn.pop());
            }
        }
        int result = stackOut.pop();//弹出第一个元素
        return result;
    }
    
    public int peek() {//返回队列开头的元素
        int result=this.pop();
        stackOut.push(result);// 因为pop函数弹出了元素res,所以再添加回去
        return result;
    }
    
    public boolean empty() {//如果队列为空,返回 true ;否则,返回 false
        return stackIn.isEmpty() && stackOut.isEmpty();
    }
}

 

标签:MyQueue,队列,pop,力扣,int,用栈,push,stackOut,232
From: https://www.cnblogs.com/cjhtxdy/p/17008840.html

相关文章

  • 力扣每日一题2022.12.26---1759. 统计同构子字符串的数目
    给你一个字符串s,返回s中同构子字符串的数目。由于答案可能很大,只需返回对109+7取余后的结果。同构字符串的定义为:如果一个字符串中的所有字符都相同,那么该字符......
  • 力扣459 重复的字符串
    题目:给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。示例:输入:s="abab"输出:true解释:可由子串"ab"重复两次构成。输入:s="a......
  • 力扣---217. 存在重复元素
    给你一个整数数组nums。如果任一值在数组中出现至少两次,返回true;如果数组中每个元素互不相同,返回false。示例1:输入:nums=[1,2,3,1]输出:true示例2:输入:nums=[1......
  • 力扣---1991. 找到数组的中间位置
    给你一个下标从0 开始的整数数组 nums ,请你找到最左边 的中间位置 middleIndex (也就是所有可能中间位置下标最小的一个)。中间位置 middleIndex 是满足 nums[0]......
  • 力扣---1768. 交替合并字符串
    给你两个字符串word1和word2。请你从word1开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。返回合......
  • 力扣2145. 统计隐藏数组数目
    给你一个下标从0 开始且长度为n 的整数数组 differences ,它表示一个长度为 n+1 的 隐藏 数组 相邻 元素之间的 差值 。更正式的表述为:我们将隐藏数组记作......
  • 力扣27(java&python)-移除元素(简单)
    题目:给你一个数组nums 和一个值val,你需要原地移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用O(1)额外空间并原地......
  • 力扣-304-二维区域和检索-矩阵不可变
    classNumMatrix{private: vector<vector<int>>prefixSum;public: NumMatrix(vector<vector<int>>&matrix){ intn=matrix.size(); intm=matrix[0].size(......
  • 力扣-303-区域和检索-数组不可变
    前缀和入门模板题我想着“前缀和”嘛,那就整一个“前缀和”出来,但是好像空间效率特别差感觉有点空间换时间的意思classNumArray{private: vector<int>prefixSum;pu......
  • 力扣26(java&python)-删除有序数组中的重复项(简单)
    题目:给你一个升序排列的数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持一致。由于在某些语言中......