LeetCode:Sliding Window Maximum 题解 Python
来源:互联网 发布:手机mac地址修改器 编辑:程序博客网 时间:2024/06/11 01:08
LeetCode:Sliding Window Maximum 题解 Python
这是我第一个python代码,也是我LeetCode第一道题,好开心啊!Mark一下
这道题虽然在hard分类下,但是其实是一个简单的经典的单调队列问题。
要求用线性的复杂度求一个数列的每个长度为K的子串的最大值。
题解:
维护一个单调队列, 队列中每个元素存的是(地址,值) 其中地址递增,值递减。 队首是队列,队尾是个栈。
1.顺序遍历数列
2.每次遇到一个新的数,就看看队列中队首元素到当前的位置差是不是大于K,
3.如果是,则队首元素出队 。 为什么呢,很好理解,因为第i个数字的作用范围为 [i-k+1, i+k-1]。 如果队首元素离当前位置距离超过k,则不会对当前位置的答案造成影响了
4.队尾维护一个栈,比较当前数和队尾元素的值的大小,如果队尾元素小则一直弹出栈,最后把当前的地址和数值压进队尾。
5.当前队首的值则是以当前地址为终止地址的窗口的最大值。
<span style="font-size:14px;">class Solution: # @param {integer[]} nums # @param {integer} k # @return {integer[]} def maxSlidingWindow(self, nums, k): que = [ (-1000000,1000000) ] ans = [] for i in range( len(nums) ) : while len(que)>0 and i-que[0][0] >= k : del que[0] while len(que)>0 and que[-1][1]<=nums[i] : que.pop(); que.append( (i,nums[i]) ) if i>=k-1 : ans.append(que[0][1]) return ans </span>^_^ 代码超短的。
记得第一次遇到这道题是在2012年高二的coci(克罗地亚的比赛),那天大年三十。爹妈在看春晚而我在COCI中遇到了这道提,当时不会做,第二天问了别人过掉了。 印象很深的回忆印象很深的题。
0 0
- LeetCode:Sliding Window Maximum 题解 Python
- LeetCode 题解(143): Sliding Window Maximum
- LeetCode题解——Sliding Window Maximum
- LeetCode 239. Sliding Window Maximum 题解(上)
- LeetCode 239. Sliding Window Maximum 题解(下)
- [python]leetcode(239). Sliding Window Maximum
- leetcode Sliding Window Maximum
- [LeetCode]Sliding Window Maximum
- leetcode - Sliding Window Maximum
- LeetCode - Sliding Window Maximum
- Leetcode: Sliding Window Maximum
- [LeetCode]Sliding Window Maximum
- LeetCode Sliding Window Maximum
- [LeetCode]Sliding Window Maximum
- [leetcode] Sliding Window Maximum
- LeetCode Sliding Window Maximum
- LeetCode || Sliding Window Maximum
- [LeetCode]Sliding Window Maximum
- 通用css样式模板
- c++ primer plus 第八章《编程题8.7.8》
- POJ 1228 Grandpa's Estate(判断是否稳定凸包)
- 如何在 Java 中正确使用 wait, notify 和 notifyAll – 以生产者消费者模型为例
- Android UI学习 - 对话框
- LeetCode:Sliding Window Maximum 题解 Python
- Quartz2d从易到难全解析---绘制封闭三角形,四边形
- WEB开发笔记
- poj1860 最短路 无限增大环
- 51Nod 1135-原根(快速求解一个素数的原根)
- 3D打印培训的几个误区
- 黑马程序员—基本数据类型包装类和String类
- c++ primer plus 第八章《编程题8.8.3》
- Android源码——通讯录联系人(一):Contacts数据库初识