LeetCode题解(Offer59I):计算数组中滑动窗口的最大值(Python)
发布日期:2021-06-29 20:01:00 浏览次数:2 分类:技术文章

本文共 1560 字,大约阅读时间需要 5 分钟。

题目:(简单)

标签:数组、队列、滑动窗口

解法 时间复杂度 空间复杂度 执行用时
Ans 1 (Python) 平均时间复杂度 = O ( N ) O(N) O(N) ; 最坏时间复杂度 = O ( ( N − K ) × K ) O((N-K)×K) O((NK)×K) O ( K ) O(K) O(K) 56ms (99.27%)
Ans 2 (Python) O ( N ) O(N) O(N) O ( K ) O(K) O(K) 68ms (91.03%)
Ans 3 (Python)

解法一:

在这里插入图片描述

class Solution:    def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:        if not nums:            return []                ans = [max(nums[:k])]        for i in range(k, len(nums)):            if nums[i] >= ans[-1]:                ans.append(nums[i])            elif nums[i - k] == ans[-1]:                ans.append(max(nums[i - k + 1:i + 1]))            else:                ans.append(ans[-1])        return ans

解法二(双向队列):

class Solution:    def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:        # 处理特殊情况        if not nums or k == 0:            return []        if k == 1:            return nums        # 初始化滑动窗口队列        queue = collections.deque()        max_idx = 0        for i in range(k):            if queue and queue[0] == i - k:                queue.popleft()            while queue and nums[queue[-1]] < nums[i]:                queue.pop()            queue.append(i)            if nums[i] > nums[max_idx]:                max_idx = i        ans = [nums[max_idx]]        # 遍历并滑动窗口        for i in range(k, len(nums)):            if queue and queue[0] == i - k:                queue.popleft()            while queue and nums[queue[-1]] < nums[i]:                queue.pop()            queue.append(i)            ans.append(nums[queue[0]])        return ans

转载地址:https://dataartist.blog.csdn.net/article/details/108637466 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:LeetCode题解(0239):滑动窗口最大值(Python)
下一篇:LeetCode题解(Offer58II):向左旋转字符串(Python)

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月06日 15时42分42秒