原题链接

题意:

给定一个数组数字,有一个大小为k的滑动窗口,它从数组的最左边移动到最右边。你只能在窗口看到k个数字。每次滑动窗口向右移动一个位置。

记录每一次窗口内的最大值,返回记录的值。

思路:

解法一:

一开始用的c++迭代器来模拟窗口,每移动一次就遍历一次找出最大值填入返回数组中。

效率非常低 Runtime: 108 ms, faster than 7.98% of C++

class Solution
{
public:
vector<int> maxSlidingWindow(vector<int> &nums, int k)
{
int len = nums.size();
vector<int> vec; if (len == )
return vec; vector<int>::iterator iter = nums.begin();
for (int i = ; i + k <= len; i++)
{
vec.push_back(*max_element(iter + i, iter + i + k));
}
return vec;
}
};

解法二:

在Discuss中看到大家普遍用的一直优解思路:

用一个双端队列deque保存每一个窗口里的最大值的索引,同时该队列保存的索引为有序的。

Runtime: 60 ms, faster than 45.44% of C++

class Solution
{
public:
vector<int> maxSlidingWindow(vector<int> &nums, int k)
{
deque<int> dq;
vector<int> ans;
for (int i = ; i < nums.size(); i++)
{
if (!dq.empty() && dq.front() == i - k)
dq.pop_front(); while (!dq.empty() && nums[dq.back()] < nums[i])
dq.pop_back(); dq.push_back(i); if (i >= k - )
ans.push_back(nums[dq.front()]);
}
return ans;
}
};

最新文章

  1. Spring5:@Autowired注解、@Resource注解和@Service注解
  2. ABP框架 - 数据传输对象
  3. 机器学习实战笔记(Python实现)-04-Logistic回归
  4. Karma: 3 - 测试覆盖率
  5. boost解析json(2)
  6. 图之BFS和DFS遍历的实现并解决一次旅游中发现的问题
  7. Highcharts axja 获取json对象动态生成报表生成
  8. OCI-DML-更新数据库中不存在的字段
  9. (转)Eclipse Shortcuts
  10. 在Idea中调试ant应用
  11. Ubuntu环境变量——系统变量和用户变量
  12. Python 浅析线程(threading模块)和进程(process)
  13. 【已解决】checkout 配置无效的问题可以进来看下
  14. chrome 和IE 上传的文件,在net 后台取值Request.Form.Files[0].FileName 的不同
  15. json文件转换成excel
  16. VMWAR-workstatuon : 安装win10、server 2008 r2、server 2012 r2
  17. HttpWebRequest using Basic authentication
  18. C# MVC EF框架 用事务
  19. oracle创建用户、创建表空间、授权、建表
  20. 1209 -The MySQL server is running with the --read-only option

热门文章

  1. MySQL InnoDB缓冲池(Buffer Pool)
  2. SpringMVC与uploadify结合进行上传
  3. 每日一问:浅谈 onAttachedToWindow 和 onDetachedFromWindow
  4. DOM模型-属性操作
  5. Anaconada安装
  6. devexpress GridView按条件给行号上色
  7. 多线程与高并发(三)synchronized关键字
  8. Confluence5.6.6安装和破解
  9. MySQL 全文索引实现简单版搜索引擎
  10. C#类成员初始化顺序