这些是单调队列的应用场景之一,还有其他一些问题也可以使用单调队列解决。单调队列的核心思想是维护一个递增或递减的队列,通过在队尾插入元素和在队头删除元素来保持队列的单调性。这样就可以在 O(1) 时间内获取滑动窗口中的最值或其他满足条件的值。 模板奉上: 第一种使用STL deque<int>q;//滑动窗口for(int i...
总结:单调栈和单调队列都是让数据结构里的数据通过删除一直保持单调有序 拿数组模拟的队列和栈相比最大的好处就是快!STL的队列和栈就没有那么快 但是实际应用中STL编译的时候,我们会开 优化,开完之后其实速度跟数组模拟的队列差不多快 O2优化实际上是Optimize,2是优化等级。除了O2优化还有O3优化,这是更高等级的...
单调队列与普通队列有些不同,因为右端既可以插入又可以删除,因此在代码中通常用一份数组和rear与rear两个指针来实现,而不是使用STL中的queue。如果一定要使用STL ,那么则可以使用双端队列(即两端都可以插入和删除),即deque 。队列的大小问题 在谈及单调栈时,无需关心栈的大小。而对于队列,队列的大小就很重要了...
单调队列的核心思想是维护一个递增或递减的队列,通过在队尾插入元素和在队头删除元素来保持队列的单调性。这样就可以在 O(1) 时间内获取滑动窗口中的最值或其他满足条件的值。 模板奉上: 第一种使用STL 代码语言:javascript 复制 deque<int>q;//滑动窗口 for(int i = 0; i < nums.size(); i++){ ...
//用stl来写 这个使得如果没有找到比他小的就赋值为n+1 for(i=n;i>=1;i--){while(!q.empty()&&q.top().h>h[i]) q.pop();if(!q.empty()) r[i]=q.top().s;else r[i]=n+1; node t; t.h=h[i]; t.s=i; q.push(t); ...
STL 模板 【 5 】容器(container)和迭代器(iterator) 【 5 】对(pair)、元组(tuple) 【 5 】集合(set)、多重集合(multiset) 【 5 】双端队列(deque)、优先队列(priority_ queue) 【 5 】映射(map)、多重映射(multimap) 【 5 】算法模板库中的常用函数 ...
开始接触STL后,发现set和map真是强大好用,对这个题直接暴力用multiset模拟滑动窗口: #include<stdio.h>#include<iostream>#include<vector>#include<set>#defineIOS_SPEED std::ios::sync_with_stdio(false)usingstd::cin;usingstd::cout;usingstd::vector;usingstd::multiset;voidinterface(){intnums,size;intne...
2. 维护单调队列 因为半平面交是一个凸多边形,所以需要维护一个凸壳。因为后来加入的只可能会影响最开始加入的或最后加入的边(此时凸壳连通),只需要删除队首和队尾的元素,所以需要用单调队列。 我们遍历排好序了的向量,并维护另一个交点数组。当单队中元素超过 2 个时,他们之间就会产生交点。 对于当前向量,如果...
622 Design Circular Queue design-circular-queue.cpp O(1) 循环队列 O(n) 640 Solve the Equation solve-the-equation.cpp O(n) 解一元一次方程 O(1) 643 Maximum Average Subarray I maximum-average-subarray-i.c O(n) 滑动窗口 O(1) 661 Image Smoother image-smoother.cpp O(m*n) 遍历(STL并行...
STL中的数据结构 vector deque set / map 动态规划 / 记忆化搜索 动态规划和记忆化搜索在思考方式上的区别 最长子序列系列问题 最长不下降子序列 最长公共子序列 最长公共不下降子序列 一类NP问题的动态规划解法 树型动态规划 背包问题 动态规划的优化