leetcode239
class Solution:
def maxSlidingWindow(self, nums: 'List[int]', k: int) -> 'List[int]':
n = len(nums)
if n==0:
return []
if k==0:
return []
dic = {}
for i in range(k):
dic.update({i:nums[i]}) maxindex = max(dic,key=dic.get)
result = list()
result.append(dic[maxindex]) i=0
j=k
while j<len(nums):
del dic[i]
dic.update({j:nums[j]})
maxindex = max(dic,key=dic.get)
result.append(dic[maxindex])
i+=1
j+=1 return result
显然这是暴力搜索算法,性能比较差,执行时间1800ms,基本上是超时的边缘了。
下面是参考其他人的,执行时间120ms
class Solution:
def maxSlidingWindow(self, nums: 'List[int]', k: int) -> 'List[int]':
n=len(nums)
stack=[]
ans=[]
for i in range(n):
while stack and nums[i]>nums[stack[-1]]:
stack.pop()
while stack and i-stack[0]>=k:
stack.pop(0)
stack.append(i)
if i>=k-1:
ans.append(nums[stack[0]])
return ans
思路分析:使用滑动窗口,stack是宽度为k的滑动窗口,并且里面的元素是从大到小排列的。
外层滑动窗口每次取的是stack[0],也就是当前滑动个窗口范围内最大的值的下标,存储在stack[0]中。因此nums[stack[0]]就是当前范围的最大值。
leetcode239的更多相关文章
- [Swift]LeetCode239. 滑动窗口最大值 | Sliding Window Maximum
Given an array nums, there is a sliding window of size k which is moving from the very left of the a ...
- LeetCode239. Sliding Window Maximum
Given an array nums, there is a sliding window of size k which is moving from the very left of the a ...
- 剑指offer-java
面试题67 机器人的运动范围 题意: 地上有一个m行和n列的方格.一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子. ...
- LeetCode-Queue
简单题 1. 数据流中的移动平均值 $(leetcode-346) 暂无 2. 最近的请求次数(leetcode-933) 写一个 RecentCounter 类来计算最近的请求. 它只有一个方法:p ...
随机推荐
- Qml和C++开发的学生信息管理软件一
一个月前接触到了Qml,也做过一些练习,但只能实现动画和简单的布局功能,逻辑部分和数据处理很难上手,看到许多人将C++和结合起来,Qml负责界面设计,C++实现逻辑处理,但将C++注册到 Qml中一直 ...
- python高级变量类型(元组,列表,字典, 字符串和重要方法)
高级变量类型 目标 列表 元组 字典 字符串 公共方法 变量高级 知识点回顾 Python 中数据类型可以分为 数字型 和 非数字型 数字型 整型 (int) 浮点型(float) 布尔型(bool) ...
- ADO.NET 的五个对象
首先来一张关系图,了解大概关系. 知道了整个大关系之后,我们在具体看一下他们五个的分工: 1. SqlConnection 在访问数据时,我们首先必须要建立数据库的物理连接.· 2.SqlComman ...
- python day27--常用模块 time,random,os,序列化
一.time模块 %y 两位数的年份表示(00-99) %Y 四位数的年份表示(000-9999) %m 月份(01-12) %d 月内中的一天(0-31) %H 24小时制小时数(0-23) %I ...
- 周强201771010141《面向对象程序设计(java)》第六周学习总结
枚举是一种特殊的数据类型,之所以特殊是因为它既是一种类(class)类型却又比类型多了些特殊的约束,但是这些约束的存在也造就了枚举类型的简洁,安全性以及便捷性.创建枚举类型要使用enum关键字,隐含了 ...
- [LeetCode&Python] Problem 504. Base 7
Given an integer, return its base 7 string representation. Example 1: Input: 100 Output: "202&q ...
- c++简单实现对mysql数据库操作
1.连接数据库 #include <mysql.h> #include <iostream> #include<string> #include<vector ...
- Windows7 密码修改
一:不用输入原密码的方式修改用户的密码 1 命令行输入命令:mmc #进入到控制台 2 点击左上角的文件,选择添加/删除管理单元 3 选择本地用户和组管理单元,添加到本地计算机,完成,确定 4 添加 ...
- 解决Visual Studio禁止使用strlen函数的问题
问题描述: 在学习C++的复制构造函数以及复制赋值运算符的重载时,需要用到使用C风格的字符串作为引入,由于我用的是VS2015(社区版),在编译时出错.编译器提醒strcpy函数是不安全的,建议改用s ...
- Redis缓存相关问题总结
使用缓存是系统性能优化的第一黄金法则. 缓存的设计和使用对一个系统的性能至关重要,平时接触到项目无论多少也都会在某些层面用到缓存,比如用HashMap实现,Ehcache,memcached.redi ...