hh总算是理解了
传送门 :
思路朴素算法的分析 :
显然我们可以对于每一个区间都进行一遍找最大最小值,
时间复杂度 O ( n ∗ k ) O(n*k) O(n∗k),在 k k k大的情况下,显然是会 T L E TLE TLE的,而且我们也不难发现,对于
除了开头 k − 1 k-1 k−1和结尾 k − 1 k-1 k−1个数之外,其他数都进行了 k k k次 比较
这里我们可以采用单调队列优化 :
队列的性质 : 后进先出
对于入队操作,我们考虑 :
如果当前一个数需要进入队列内,若这个数比先进队的数大 , 那么显然 前面的数不可能是
我们需要统计的最大值,一定先出列,并且我们将这个数弹入队尾,这样子就可以确保,每
次到了统计答案的区间的时候,队头一定是最大的那个
因为每一个数,入队出队一次,所以时间复杂度变为 O ( n ) O(n) O(n)
CODEconst int N = 1e6+10;
int q[N],a[N];
int n,k;
void getmin(){
int hh = 0 ,tt = -1;
//定义为空队列
for(int i=1;i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?