1.这是一道是拿一个滑动窗口,每次移动位置,然后找到其中的最大值就行。
链接:https://leetcode.com/problems/sliding-window-maximum/
这题的做法有很多。
可以使用最大堆,也可以使用双端队列。
不管用什么方法,反正就是不断根据滑动到的数据,维护这个数据结构就行了。
我们使用双端队列的方法。
1.先记录初始时,滑动块的最大值和位置;
2.每次循环的时候,维护双端队列,包括:删除第一个元素、添加一个新的元素、将最大值移位,并判断是否出队、找到最大值。
2.题解:
class Solution(object):
def maxSlidingWindow(self, nums, k):
if len(nums) == 0:
return None
data = nums[:k]
max_data = max(data)
max_index = data.index(max_data)
# print("--", max_index, max_data)
return_max = [max_data]
i = k
while i < len(nums):
data.pop(0)
data.append(nums[i])
max_index -= 1
if max_index < 0:
max_data = max(data)
else:
max_data = nums[i] if nums[i] > max_data else max_data
return_max.append(max_data)
i += 1
return return_max
3.完整代码
查看链接:
https://github.com/Wind0ranger/LeetcodeLearn/blob/master/3-heap/239-sliding-window-maximum.py