声明::大家好,我也是一个在学习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 就懂了你
}注意是这个