美文网首页
[每日一题]239. Sliding Window Maximu

[每日一题]239. Sliding Window Maximu

作者: 何学诚 | 来源:发表于2019-04-08 21:38 被阅读0次
1.这是一道是拿一个滑动窗口,每次移动位置,然后找到其中的最大值就行。

链接:https://leetcode.com/problems/sliding-window-maximum/

239-sliding-window-maximum.png

这题的做法有很多。
可以使用最大堆,也可以使用双端队列。
不管用什么方法,反正就是不断根据滑动到的数据,维护这个数据结构就行了。

我们使用双端队列的方法。
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

相关文章

网友评论

      本文标题:[每日一题]239. Sliding Window Maximu

      本文链接:https://www.haomeiwen.com/subject/vudmiqtx.html