刷题记录03(C++)

该博客介绍了如何利用两个栈的数据结构实现队列的Push和Pop操作。在push时,元素进入stack1,pop时如果stack2为空则将stack1的所有元素转移至stack2,然后从stack2出栈。这种方法巧妙地模拟了队列的行为,要求对数据结构有深入理解。
摘要由CSDN通过智能技术生成

牛客网刷题:【剑指offer】

1、题目:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。

2、解析:主要采用栈的push(进栈)与pop(出栈)的原理来对队列和栈进行操作。利用模拟的方法先定义一个stack1和stack2,push操作就直接往stack1中push, pop操作需要分类一下;如果stack2为空,那么需要将stack1中的数据转移到stack2中,然后在对stack2进行pop,如果stack2不为空,就可以直接pop。

3、代码:

class Solution
{
public:
    void push(int node) //定义 进栈node //
     {
        stack1.push(node);// 将node进栈到stack1中//
    }

    int pop() //定义出栈//
     {
        if (stack2.empty())      
           {
            while (!stack1.empty()) 

             {
                stack2.push(stack1.top());
                stack1.pop();//如果stack2为空,stack1不为空时,将stack1中的数据转移到stack2中,stack1出栈//
            }
        }
        int ret = stack2.top(); //将stack2的栈顶定义为 整形ret//
        stack2.pop(); 
        return ret;//stack2出栈,返回ret//
    }

private:
    stack<int> stack1;
    stack<int> stack2;
};

4、总结这一题比较好理解,但算法也要很牢的基础才能很快想出来,要很熟练数据结构。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用中的代码片段是一个递归函数,名为beautifulArray,它接受一个整数n作为参数,并返回一个vector<int>类型的结果。这个函数用于生成一个长度为n的漂亮数组,漂亮数组满足以下条件:如果将其划分为两个任意长度的子数组,那么两个子数组的元素之和不相等。 函数的实现思路是通过递归,将问题划分为两个子问题,然后合并子问题的解。首先判断n是否等于1,如果等于1,则直接返回一个包含1的数组。否则,将n减1后的一半传入递归函数beautifulArray,得到一个漂亮数组res1。然后将n的一半传入递归函数beautifulArray,得到另一个漂亮数组res2。最后,将res1中的每个元素乘以2并减去1,然后与res2中的每个元素乘以2合并到结果数组res中。 引用中的代码片段是一个函数,名为translateNum,它接受一个整数num作为参数,并返回一个整数。这个函数用于计算将整数num翻译成字符串的不同方法数。 函数的实现思路是将整数num转换为字符串str,然后创建一个长度为str.size()-1的动态数组dp,用于记录不同位置的翻译方法数。然后初始化dp和dp[1]为1,表示前两位数字的翻译方法数。接下来,从第三位数字开始遍历字符串str,如果当前数字与前两位数字可以构成一个在10到25之间的整数,则将dp[i]的值设置为dp[i-1]+dp[i-2],表示当前位置的翻译方法数为前一位和前两位数字的翻译方法数之和。最后,返回dp最后一个元素的值,即为翻译整数num的不同方法数。 引用中的代码片段是一个函数,名为numberOfArithmeticSlices,它接受一个vector<int>类型的数组nums作为参数,并返回一个整数。这个函数用于计算数组nums中等差子序列的个数。 函数的实现思路是通过动态规划,创建一个与nums长度相同的动态数组dp,用于记录以每个位置为结尾的等差子序列的个数。然后遍历数组nums,从第三个元素开始,判断当前元素与前两个元素是否构成等差数列,如果是,则将dp[i]的值设置为dp[i-1]加1,表示以当前位置为结尾的等差子序列个数为前一位的等差子序列个数加1。最后,返回dp数组中所有元素的和,即为等差子序列的个数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值