zoukankan      html  css  js  c++  java
  • 边工作边刷题:70天一遍leetcode: day 61-4

    Sliding Window Maximum

    要点:这题O(nlgk)的算法很简单,就是用个max heap,当然还有O(n)的算法。具体的就是用deque,deque中maintain从大到小的顺序。显然,deque头就是每个sliding window的max值。这里的问题是移动到下一个元素的时候如何maintain:

    • 从deque尾删除元素,新元素从deque尾入:如果新元素大于队尾,显然无论其是否为max,因为新元素在右边,队尾的元素就没用了
    • 从deque头删除元素:如果队头的值超过了sliding window,删除掉。注意出界的元素不需要立即删除,直到其可能成为max的的时候。所以这个删除是loop
    • deque存的是index:类似题既需要index又需要value的,只要value不变,就存index就可以了

    错误点:

    • 不需要单独先push前k个,只需要i没到前k个时候不push到res即可
    class Solution(object):
        def maxSlidingWindow(self, nums, k):
            """
            :type nums: List[int]
            :type k: int
            :rtype: List[int]
            """
            deque = []
            res = []
            for i in xrange(len(nums)):
                while deque and nums[deque[-1]]<nums[i]:
                    deque.pop()
                while deque and deque[0]<=i-k:
                    deque.pop(0)
                
                deque.append(i)
                if i>=k-1:
                    res.append(nums[deque[0]])
            return res
    
  • 相关阅读:
    Java面向对象知识点总结
    JAVA编程必学必会单词集(1)
    Linux 帮助命令
    学习笔记
    day4
    复习
    day5
    day04
    day3
    day02
  • 原文地址:https://www.cnblogs.com/absolute/p/5690337.html
Copyright © 2011-2022 走看看