代码随想录---栈与队列

声明::大家好,我也是一个在学习c++的菜狗,如果你刷到了我 感觉代码随想录我写的模块里面的题目有那个不会的 欢迎私信我,我会尽我所能给你解释(纯纯交朋友!)

1---用栈实现队列(细节很重要)

首先我们题目不是难题但是很多细节 比如 

// while(!a.empty()) {
//                 b.push(a.top());
//                 a.pop();
//            }
           int s = a.size();
            for(int i=0;i<s;i++){
                b.push(a.top());
                   a.pop();
            }

这两个代表的是一个 但是如果没有int s=a.size() 就会出错 因为我们a会进行pop 所以他的size会变化 得出的结论就是尽量用while!

还有就是我们的s.empty() 意思是什么如果是空 那就是true  非空就是 false 别混淆

2---用队列实现栈 (再看看)

一定要注意要把q2的东西清除了!!!!

3---删除字符串所有重复项

这个题目的问题就是使用stack!!!

  if (st.empty() || s != st.top()) {
                st.push(s);
            } else {
                st.pop(); // s 与 st.top()相等的情况
            }

里面的else条件是当栈 st 不为空并且栈顶元素 st.top() 等于 s 的时候。

4---逆波兰表达式求值(会)

5---滑动窗口最大值 (不会)

首先我们用deque可以保存k个数据 然后每次对k个数据进行for暴力找出我们最大的值就行了,复杂度 n*k,有点高

我们采用的是单调队列方式

就是保证我们自建的队列他的front()都是最大的

 while(!d.empty()&&s>d.back()){

        d.pop_back();//删除最后一个 不是front  例子3 1 2  就懂了你

      }注意是这个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值