精华内容
下载资源
问答
  • 题目描述:设计一个支持 push ,pop ,top 操作,并能常数时间内检索到最小元素的。 代码: class MinStack { public: /** initialize your data structure here. */ stack<int>s1; stack<int>s2...
    题目:leetcode155. 最小栈
    题目描述:设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。在这里插入图片描述在这里插入图片描述在这里插入图片描述
    代码:
    class MinStack {
    public:
        /** initialize your data structure here. */
        stack<int>s1;
        stack<int>s2;
        
        void push(int x) {
            s1.push(x);
            if(s2.empty()||x<=getMin()) s2.push(x);
        }
        
        void pop() {
            if(s1.top()==s2.top()) s2.pop();
            s1.pop();
        }
        
        int top() {
            return s1.top();
        }
        
        int getMin() {
            return s2.top();
        }
    };
    
    /**
     * Your MinStack object will be instantiated and called as such:
     * MinStack* obj = new MinStack();
     * obj->push(x);
     * obj->pop();
     * int param_3 = obj->top();
     * int param_4 = obj->getMin();
     */
    
    题目:leetcode1441. 用栈操作构建数组
    题目描述:给你一个目标数组 target 和一个整数 n。每次迭代,需要从 list = {1,2,3…, n} 中依序读取一个数字。在这里插入图片描述在这里插入图片描述在这里插入图片描述
    代码:
    class Solution {
    public:
        vector<string> buildArray(vector<int>& target, int n) {
            int i=1;
            vector<string>ans;
            for(int j=0;j<target.size();++j){
                while(i<n&&i!=target[j]){
                    ans.push_back("Push");
                    ans.push_back("Pop");
                    ++i;
                }
                ans.push_back("Push");
                ++i;
            }
            return ans;
        }
    };
    
    题目:剑指 Offer 09. 用两个栈实现队列
    题目描述:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )在这里插入图片描述
    代码:
    class CQueue {
    public:
        CQueue() {}
        stack<int>s1;
        stack<int>s2;
        
        void appendTail(int value) {
            s1.push(value);
        }
        
        int deleteHead() {
            if(!s1.empty()) return -1;
            while(!s1.empty()){
                int tmp=s1.top();
                s1.pop();
                s2.push(tmp);
            }
            int res=s2.top();
            s2.pop();
            while(!s2.empty()){
                int temp=s2.top();
                s2.pop();
                s2.push(temp);
            }
            return res;
        }
    };
    
    /**
     * Your CQueue object will be instantiated and called as such:
     * CQueue* obj = new CQueue();
     * obj->appendTail(value);
     * int param_2 = obj->deleteHead();
     */
    
    展开全文
  • 两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成队列尾部插入整数和队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 ) 二、示例 三、解题...

    一、题目描述

    用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )

    二、示例

    在这里插入图片描述

    三、解题思路

    我们使用数组的pop()和push()方法来实现。具体的思路:栈一用作入栈操作,栈二用作出栈操作,栈二有三种情况在这里插入图片描述

    四、代码

    var CQueue = function() {
       this.stack1 = []
       this.stack2 = []
    };
    /** 
     * @param {number} value
     * @return {void}
     */
    CQueue.prototype.appendTail = function(value) {
      this.stack1.push(value)
    };
    
    /**
     * @return {number}
     */
    CQueue.prototype.deleteHead = function() {
      // 一. 2 不为空,直接取
      if (this.stack2.length) return this.stack2.pop()
      // 二. 2 为空 循环1, 往2中继续添加元素
      while(this.stack1.length){
        this.stack2.push(this.stack1.pop())
      }
      return this.stack2.pop() || -1
    };
    
    /**
     * Your CQueue object will be instantiated and called as such:
     * var obj = new CQueue()
     * obj.appendTail(value)
     * var param_2 = obj.deleteHead()
     */
    
    

    五、结果

    在这里插入图片描述

    展开全文
  • 尝试使用栈(stack)来实现队列(queue). ...可以使用两个栈实现一个队列:根据队列先进先出的思想,所以必须有一个额外栈翻转一次数组.这个翻转的数组可以插入时完成, 也可以取值的时候完成. .
    尝试使用栈(stack)来实现队列(queue).
    
    Example:
    MyQueue queue=new MyQueue();
    queue.push(1);
    queue.push(2);
    queue.peek();//returns 1
    queue.pop();//returns 1
    queue.empty();//return false
    
    解题思路:
    可以使用两个栈来实现一个队列:根据队列先进先出的思想,所以必须有一个额外栈翻转一次数组.这个翻转的数组可以在插入时完成,
    也可以在取值的时候完成.
    #include <iostream>
    #include <stack>
    
    using namespace std;
    class MyQueue{
    private:
        stack<int> in,out;
        /*翻转数组*/
        void in2out(){
            if(out.empty()){
                while(!in.empty()){
                    int x=in.top();
                    in.pop();
                    out.push(x);
                }
            }
        }
    public:
        MyQueue(){}
        /*入队*/
        void push(int x){
            in.push(x);
        }
        /*出队*/
        int pop(){
            in2out();
            int x=out.top();
            out.pop();
            return x;
        }
        /*队首*/
        int peek(){
            in2out();
            return out.top();
        }
        /*队尾*/
        int back(){
            return in.top();
        }
    };
    
    int main(int argc,char* argv[]){
        MyQueue queue;
        queue.push(4);
        queue.push(1);
        cout<<queue.peek()<<endl;
        return 0;
    }

     

    展开全文
  • 题目描述: 尝试使用栈(stack)来实现队列(queue...我们可以用两个栈实现一个队列:因为我们需要得到先入先出的结果,所以必定要通过一个额外栈翻转一次数组。这个翻转过程既可以插入时完成,也可以取值时完

    题目链接:点击查看

    题目描述:

    尝试使用栈(stack)来实现队列(queue)。

    输入输出:

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

    题目分析:

    我们可以用两个栈来实现一个队列:因为我们需要得到先入先出的结果,所以必定要通过一个额外栈翻转一次数组。这个翻转过程既可以在插入时完成,也可以在取值时完成。

    代码:
     

    class MyQueue
    {
       stack<int> in,out;
    public:
       MyQueue(){}//构造函数
       void push(int x)
       {
           in.push(x);	
       }
       int pop()
       {
          in2out();//翻转栈结构 
    	  int x=out.top();
    	  out.pop();
    	  return x;	
       }	
       int peek()
       {
       	 in2out();//翻转栈结构 
       	 return out.top();
       }
       void in2out()
       {
       	  if(out.empty())
       	  {
       	      while(!in.empty())
    		  {
    		         int x=in.top();//将 in 中栈顶元素取出 然后压入out中 实现栈的翻转操作  
    				 in.pop();
    				 out.push(x);	
    		  }	
    	  }
       }
       bool empty()
       {
       	 return in.empty()&&out.empty();
       }
    };
    展开全文
  • 两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成队列尾部插入整数和队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 ) 输入: ["CQueue",...
  • 文章目录问题描述解题报告实现代码参考资料 问题描述 给定两个 没有重复元素 的数组 nums1 和 ...求解每个元素的下一个更大元素,采用 单调递减 来存储数组中的元素,当前元素小于栈顶元素时,压栈;当前元素大于
  • Leetcode 题解 - 栈和队列 1. 用栈实现队列 2. 用队列实现栈 3. 最小值栈 ...使用两个栈实现队列,一个元素需要经过两个栈才能出队列,经过第一个栈时元素顺序被反转,经过第二个栈时再次被反转,此时就.
  • 队列(Queue) ...我们可以将看做一个动态数组(ArrayList)或者一个线性表(List),这样很好的实现栈的添加和删除等操作。 下面通过将上一次我们写的ArrayList动态数组导入进去,变为Stack()的一部分,
  • Java实现 LeetCode 735 行星碰撞(

    千次阅读 多人点赞 2020-04-11 09:02:49
    给定一个整数数组 asteroids,表示同一行的行星。 对于数组中的每一个元素,其绝对值表示行星的大小,正负表示行星的移动方向(正表示向右移动,负表示向左移动)。每一颗行星以相同的速度移动。 找出碰撞后剩下的...
  • _.findIndex 的作用就是从一个数组中找到第一个满足某个条件的元素,_.findLastIndex 则是找到最后一个(或者说倒序查找)。 举个简单的例子: <pre><code> javascript var arr = [1, 3...
  • 题目要求 给你两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。 请你找出 nums1 中每个元素 nums2 中的...根据题目要求,容易想到用数组实现栈;用字典保存nums2中每个元素的下一个更大值,其
  • leetcode系列-与队列

    2021-05-31 20:28:10
    是容器,stack是继承自Vector,底层使用数组存储、用来模拟一个java集合。同时也是线程安全的。 2、里面的元素内存中是连续分布的么? 这个问题有两个陷阱: 陷阱1:是容器适配器,底层容器使用不同的...
  • leetCode第232题 这道题的场景实际需求中基本上不会遇见,但挺有意思的,值得我们去思考 解法 ... this.aStack = [] //我们需要两个数组来帮助我们逆序一个堆栈 this.bStack = [] }; /** ...
  • 比如我们可以选择两种不同的处理顺序,先入先出和后入先出,分别对应两个不同的线性数据结构,队列和。 我们将详细介绍每个数据结构的定义,实现和内置函数。 然后,我们将更多地关注这两种数据结构的实际应用。 ...
  • 一个部分是 leetcode 经典题目的解析,包括思路,关键点和具体的代码实现。 第二部分是对于数据结构与算法的总结 第三部分是 anki 卡片, 将 leetcode 题目按照一定的方式记录 anki 中,方便大家记忆。 第...
  • 文章目录问题描述解题报告实现代码参考资料 问题描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此...维持一个 单调递减,当前元素大于栈顶元素时,如果中存在两个以上元素,就可以储水了。 实现代
  • q34_排序数组中查找元素的第一个和最后一个位置 动态规划 q5_最长回文子串 q53_最大子序和 q62_不同路径 q64_最小路径和 q70_爬楼梯 q118_杨辉三角 q300_最长上升子序列 q1143_最长公共子序列 q1277_统计全为1...
  • 一个部分是 leetcode 经典题目的解析,包括思路,关键点和具体的代码实现。 第二部分是对于数据结构与算法的总结 第三部分是 anki 卡片, 将 leetcode 题目按照一定的方式记录 anki 中,方便大家记忆。 第...
  • Leetcode ...排序数组中查找元素的第一个和最后一个位置 有效的数独 字符串相乘 字母异位词分组 pow-x-n 二叉树的前序遍历 lru 缓存机制 最长上升子序列 二叉树的中序遍历 实现-trie-前缀树 困难 缺失
  • LeetCode解题总结

    2018-10-09 16:02:19
    6.1 合并两个有序数组到其中一个数组 6.2 合并两个有序链表 6.3 合并K个有序链表 6.4 使用插入排序来排序链表 6.5 归并排序排序链表 6.6 第一个缺少的正数 6.7 排序颜色 7. 查找 7.1 排序数组中查找数出现的范围 ...
  • 两个栈实现队列剑指 Offer 10- I. 斐波那契数列剑指 Offer 10- II. 青蛙跳台阶问题剑指 Offer 11. 旋转数组的最小数字剑指 Offer 12. 矩阵中的路径(回溯法) 剑指 Offer 03. 数组中重复的数字 找出数组中重复的...
  • LeetCode-华为面试题库做题笔记

    千次阅读 2020-03-14 12:56:31
    给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。 一共有三种时间复杂度O(N)的解法,分别是dp,,和计数,我们都实现一下: dp dp思路:dp一位数组存放到目前这一位字符的有效子串...
  • 先只考虑前点,我们可以使用一个栈stk和一个数组inStack来辅助实现。栈中存放的是满足前点的字符串。当是inStack[s[i]]栈中就忽略这次处理,否则把s[i]入栈,更新inStack[s[i]]的值。 然后考虑怎么来满足第三...
  • leetcode】剑指Offer

    2021-04-15 21:58:52
    文章目录数组中的重复的数字原地置换二维数组中的查找从左下角开始搜索替换空格遍历替换从尾到头打印链表迭代重建二叉树递归用两个栈实现队列入栈和出栈斐波那契数列迭代青蛙跳台阶问题动态规划旋转数组的最小数字二...
  • js解leetcode(53)-简单

    2020-11-11 21:36:29
    两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成队列尾部插入整数和队列头部删除整数的功能。(若队列中没有元素,deleteHead操作返回 -1 ) 思路:js因为数组的...
  • 是差点运气,可我一直努力! 当前进程: 开始时间:2020.6.27 结束时间:undefined GitHub仓库:...2、创建两个指针: 2.1、curr指针指向当前所在的节点,初
  • 这里写自定义目录标题1.找出数组中重复的数字。(2020-10-15)2.二维数组中的查找...题目描述:在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了
  • 针对这道前后关联的题,这里给出自己的解法。 首先说20题,括号匹配问题。 对于括号匹配问题,相信大家都学数据结构应该都学过,使用来存储待匹配的括号。此,为了省事,我...我们使用一个数组array来维护

空空如也

空空如也

1 2 3
收藏数 49
精华内容 19
关键字:

leetcode在一个数组实现两个栈