剑指offer——面试题65:滑动窗口的最大值
来源:互联网 发布:java做统计报表 编辑:程序博客网 时间:2024/05/22 16:00
题目:给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6,2,5],1}, {2,3,4,2,6,[2,5,1]}。
我的代码:
class Solution {public: vector<int> maxInWindows(const vector<int>& num, unsigned int size) { vector<int> s; // 创建一个空的 vecotr,专门用于返回 if(size == 1) return num; if(size == 0) return s; int numWindow = num.size() - size + 1; // 有多少个滑动窗口 vector<int> maxNumVec; int index = 0 ; //记录 num 的下标 for(int i = 0;i < numWindow;++i) //每次找到一个最大值,由 maxVal 保存,并压入 maxNumVec 中 { int maxVal = num[i];// 为每一个滑动窗口的第一个值 index = i; for(int j = 0;j < size ; ++j) // 把每个窗口里面的数字遍历一遍,每个窗口有 size 个数 { if(num[index] > maxVal) { maxVal = num[index]; } index++; // index每次在 i 的基础上,加个size-1 } maxNumVec.push_back(maxVal); } return maxNumVec; } };
分析:注释已经很详细了。不过,这样的暴力解法时间复杂度为 O(nk),n 为元素个数,k 为滑动窗口大小。
《剑指offer》上是利用栈和队列做的,P290
代码:参考:https://www.nowcoder.com/questionTerminal/1624bc35a45c42c0bc17d17fa0cba788
阅读全文
2 0
- 【剑指Offer学习】【面试题65:滑动窗口的最大值】
- 剑指offer--面试题65:滑动窗口的最大值
- 剑指Offer系列-面试题65:滑动窗口的最大值
- 剑指offer-面试题65-滑动窗口的最大值
- 【剑指Offer】面试题65:滑动窗口的最大值
- 剑指offer 面试题65 滑动窗口的最大值
- 剑指offer——面试题65:滑动窗口的最大值
- 《剑指Offer》学习笔记--面试题65:滑动窗口的最大值
- 剑指Offer面试题65:滑动窗口的最大值 Java实现
- 剑指offer—滑动窗口的最大值
- 剑指offer—滑动窗口的最大值
- 剑指offer — 滑动窗口的最大值
- 面试题65:滑动窗口的最大值
- 面试题65:滑动窗口的最大值
- 面试题65:滑动窗口的最大值
- 【剑指offer】面试题59(1):滑动窗口的最大值
- 剑指offer 65 - 滑动窗口的最大值
- 《剑指offer》:[65]滑动窗口的最大值
- XML
- Spark2.x学习笔记:16、Spark Streaming入门实例NetworkWordCount
- uboot传递initrd(initramfs or ramdisk) 到kernel的两种方式
- javaScript学习
- Android 实现全屏的Activity
- 剑指offer——面试题65:滑动窗口的最大值
- java并发编程 volatile
- [spark] 从spark-submit开始解析整个任务调度流程
- Jzoj4889 最长公共回文子序列
- python_mask_array
- Linux实验3
- 数据结构实验之二叉树五:层序遍历
- 互联网产品经理之前
- windows 32位下安装XGBOOST 0.4