leetcode225刷题打卡

简介: leetcode225刷题打卡

请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(pushtoppopempty)。

实现 MyStack 类:

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

注意:

  • 你只能使用队列的基本操作 —— 也就是 push to backpeek/pop from frontsizeis empty 这些操作。
  • 你所使用的语言也许不支持队列。 你可以使用 list (列表)或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。

题解思路:

两个队列相互配合,在进行每一步操作之前必定有一个队列是空的

  • empty的实现:
  • 如果两个队列都是空 则返回true 否则返回false
  • top的实现:
  • 返回非空队列的尾部元素
  • push的实现:
  • 向非空队列push元素
  • 一开始两个队列都是空的的时候默认向一个队列push
  • pop的实现(决定了为什么有一个队列必须为空)
  • 将非空队列中除最后一个元素外全部放入另一个空队列,然后返回之前的非空队列的头元素(仅剩这一个元素),在pop掉剩下的一个元素,然后该队列就为空了,以后就是先对另外一个队列进行操作

代码:

class MyStack {
public:
    MyStack() {
    }
    void push(int x) {
        if(this->empty()){
            queue1.push(x);
            return;
        }
        if(queue1.empty()){
            queue2.push(x);    
        }else{
            queue1.push(x);
        }
    }
    int pop() {
        //判断哪个队列为空就往哪个队列中注入全部数据
        if(queue1.empty()){
            while(queue2.size()!=1){
                queue1.push(queue2.front());
                queue2.pop();
            }
            int result = queue2.front();
            queue2.pop();
            return result;
        }else{
            while(queue1.size()!=1){
                queue2.push(queue1.front());
                queue1.pop();
            }
            int result = queue1.front();
            queue1.pop();
            return result;
        }
    }
    int top() {
        if(queue1.empty()){
            return queue2.back();
        }else{
            return queue1.back();
        }
    }
    bool empty() {
        if(queue1.empty()&&queue2.empty()) return true;
        return false;
    }
    queue<int> queue1;
    queue<int> queue2;
};


相关文章
|
18天前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-2
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
18天前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-1
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
19天前
|
索引
【LeetCode刷题】二分查找:山脉数组的峰顶索引、寻找峰值
【LeetCode刷题】二分查找:山脉数组的峰顶索引、寻找峰值
|
19天前
|
算法
【LeetCode刷题】滑动窗口解决问题:串联所有单词的子串(困难)、最小覆盖子串(困难)
【LeetCode刷题】滑动窗口解决问题:串联所有单词的子串(困难)、最小覆盖子串(困难)
|
19天前
|
算法 容器
【LeetCode刷题】滑动窗口解决问题:水果成篮、找到字符串中所有字母异位词
【LeetCode刷题】滑动窗口解决问题:水果成篮、找到字符串中所有字母异位词
|
19天前
【LeetCode刷题】专题三:二分查找模板
【LeetCode刷题】专题三:二分查找模板
【LeetCode刷题】专题三:二分查找模板
|
19天前
【LeetCode刷题】前缀和解决问题:742.寻找数组的中心下标、238.除自身以外数组的乘积
【LeetCode刷题】前缀和解决问题:742.寻找数组的中心下标、238.除自身以外数组的乘积
|
19天前
【LeetCode刷题】二分查找:寻找旋转排序数组中的最小值、点名
【LeetCode刷题】二分查找:寻找旋转排序数组中的最小值、点名
|
19天前
【LeetCode刷题】滑动窗口思想解决:最大连续1的个数 III、将x减到0的最小操作数
【LeetCode刷题】滑动窗口思想解决:最大连续1的个数 III、将x减到0的最小操作数
|
19天前
【LeetCode刷题】滑动窗口思想解决问题:长度最小的子数组、无重复字符的最长子串
【LeetCode刷题】滑动窗口思想解决问题:长度最小的子数组、无重复字符的最长子串