博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode 239. 滑动窗口最大值
阅读量:6208 次
发布时间:2019-06-21

本文共 867 字,大约阅读时间需要 2 分钟。

一:暴力解法,能ac但是时间复杂度O(nk)

class Solution {public:    vector
maxSlidingWindow(vector
& nums, int k) { int len=nums.size(); if(len==0) return {}; vector
res; for(int i=0;i<=len-k;i++){ int key=nums[i]; for(int j=1;j

 

二,维护一个特殊的优先队列(使用deque实现)假设当前队列已经是优先队列(最大值在队首),而且这个队列是有序递减的,那么当新加入一个元素时执行两个操作,

1)检查队首下标是否合法,假如队首下标已经不在滑窗内,则将其弹出;

2)检查已有的队列中的元素是否比当前元素小,小的元素全部弹出。由于已经是按值有序递减的数列,那么只需要不断的比较末尾和当前元素,即可完成该项;

此时已经对新进入的元素维护好了一个最大元素下标在队首,元素下标按值有效递减,且下标从左到右是有序的的一个队列;获取队首元素可得当前滑窗的大小;

class Solution {public:    vector
maxSlidingWindow(vector
& nums, int k) { if(nums.size()
res; deque
dq; int len=nums.size(); for(int i=0;i
=k-1){ res.push_back(nums[dq.front()]); } } return res; }};

 

转载于:https://www.cnblogs.com/joelwang/p/10685808.html

你可能感兴趣的文章
apply和call用法
查看>>
爬虫之数据解析的三种方式
查看>>
hdu5424 Rikka with Graph II
查看>>
关于有多少个1的计算
查看>>
js里的数据类型转换
查看>>
Hbase java api
查看>>
CentOS6.5安装配置
查看>>
SOM 的两种算法
查看>>
实现权重计算
查看>>
[10.5模拟] dis
查看>>
leetcode1042
查看>>
发手气红包算法
查看>>
JAVA基础----java中E,T,?的区别
查看>>
Java多线程并发学习-进阶大纲
查看>>
源码安装LNMP
查看>>
修改JAVA代码,需要重启Tomcat的原因
查看>>
OpenCV笔记(十五)——使用Laplace算子进行图像的边缘检测
查看>>
Mac下关于->您不能拷贝项目“”,因为它的名称太长或包括的字符在目的宗卷上无效。<-的删除...
查看>>
android 面试总结,后续注意学习
查看>>
学习笔记之-------UIScrollView 基本用法 代理使用
查看>>