美文网首页
[每日一题]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