![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
栈和队列
想名字多费事
编程小白入驻
展开
-
前K个高频单词
思路:和前K个高频元素那道题目只有构建小顶堆时有一丢丢差别class mycompare{public: //唯一差别 //构建小顶堆时,优先按照频率大小排序,在频率一样的情况下按照字典序大小排列 bool operator()(const pair<string,int>& lhs,const pair<string,int>& rhs){ return lhs.second>rhs.second ||(lhs.s.原创 2021-09-04 14:37:49 · 88 阅读 · 0 评论 -
前K个高频元素(top k)(TX)
思路这道题目主要涉及到如下三块内容:1、要统计元素出现频率2、对频率排序3、找出前K个高频元素首先统计元素出现的频率,这一类的问题可以使用map来进行统计。然后是对频率进行排序,这里我们可以使用一种 容器适配器就是「优先级队列」。什么是优先级队列呢?其实「就是一个披着队列外衣的堆」,因为优先级队列对外接口只是从队头取元素,从队尾添加元素,再无其他取元素的方式,看起来就是一个队列。而且优先级队列内部元素是自动依照元素的权值排列。那么它是如何有序排列的呢?缺省情况下priority_que.原创 2021-05-12 17:35:34 · 192 阅读 · 0 评论 -
滑动窗口最大值--单调队列
我们需要一种特别的队列,这个队列放进去窗口里的元素,然后随着窗口的移动,队列也一进一出,每次移动之后,队列告诉我们里面的最大值是什么。每次窗口移动的时候,调用que.pop(滑动窗口中移除元素的数值),que.push(滑动窗口添加元素的数值),然后que.front()就返回我们要的最大值。然后在分析一下,队列里的元素一定是要排序的,而且要最大值放在出队口,要不然怎么知道最大值呢。但如果把窗口里的元素都放进队列里,窗口移动的时候,队列需要弹出元素。那么已经排序之后的队列 怎么能把窗口要移除的元素.原创 2021-05-12 15:33:08 · 126 阅读 · 0 评论 -
逆波兰表达式求值+简化路径
class Solution {public: int evalRPN(vector<string>& tokens) { stack<int> st; for (int i = 0; i < tokens.size(); i++) { if (tokens[i] == "+" || tokens[i] == "-" || tokens[i] == "*" || tokens[i] == "/") {.原创 2021-05-11 21:46:44 · 55 阅读 · 0 评论 -
删除字符串中的所有相邻重复项
第一种写法public: string removeDuplicates(string S) { stack<char> st; st.push(S[0]); for(int ii=1;ii<S.size();ii++){ if(st.empty()||S[ii]!=st.top()) st.push(S[ii]); else st.pop(); } .原创 2021-05-10 19:19:31 · 94 阅读 · 2 评论 -
有效的括号
「括号匹配是使用栈解决的经典问题。」首先要弄清楚,字符串里的括号不匹配有几种情况。先来分析一下 这里有三种不匹配的情况,第一种情况,字符串里左方向的括号多余了 ,所以不匹配。第二种情况,括号没有多余,但是 括号的类型没有匹配上。第三种情况,字符串里右方向的括号多余了,所以不匹配。我们的代码只要覆盖了这三种不匹配的情况,就不会出问题,可以看出 动手之前分析好题目的重要性。...原创 2021-05-10 18:25:22 · 59 阅读 · 0 评论 -
用队列实现栈
「队列是先进先出的规则,把一个队列中的数据导入另一个队列中,数据的顺序并没有变,并有变成先进后出的顺序。」所以用栈实现队列, 和用队列实现栈的思路还是不一样的,这取决于这两个数据结构的性质。但是依然还是要用两个队列来模拟栈,只不过没有输入和输出的关系,而是另一个队列完全是用来备份的!如下面动画所示,「用两个队列que1和que2实现队列的功能,que2其实完全就是一个备份的作用」,把que1最后面的元素以外的元素都备份到que2,然后弹出最后面的元素,再把其他元素从que2导回que1。class.原创 2021-05-10 13:24:49 · 119 阅读 · 0 评论 -
用栈实现队列
class MyQueue {public: stack<int> st1,st2; /** Initialize your data structure here. */ MyQueue() { } /** Push element x to the back of queue. */ void push(int x) { st1.push(x); } /** Removes the el.原创 2021-05-09 17:14:58 · 62 阅读 · 0 评论 -
栈和队列的基础知识
C++中stack和queue 是容器么?STL中栈往往不被归类为容器,而被归类为container adapter(容器适配器)。STL中队列也不被归类为容器,而被归类为container adapter( 容器适配器)。我们使用的stack/deque是属于那个版本的STL?SGI STL我们使用的STL中stack/deque是如何实现的?栈是以底层容器完成其所有的工作,对外提供统一的接口,底层容器是可插拔的(也就是说我们可以控制使用哪种容器来实现栈的功能)SGI STL栈的底层结构默原创 2021-05-09 15:59:01 · 230 阅读 · 0 评论