力扣之滑动窗口最大值——239

问题

在这里插入图片描述
在这里插入图片描述

解答

1.暴力算法(切片)

调用max函数返回每次滑动窗口中的最大值。
时间复杂度: O(N^2)

class Solution(object):
    def maxSlidingWindow(self, nums, k):
        res=[]
        for i in range(0,len(nums)-k+1): #左闭右开
            res.append(max(nums[i:k+i])) #左闭右开
        return res

调试结果:
在这里插入图片描述

2.优化上述算法

如果当前最大值和滑出的元素相等,需重新计算当前最大值;
当前最大值和滑走的元素不相等,则需和滑入的元素比较出当前的最大值。
时间复杂度: O(N)

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

调试结果:
在这里插入图片描述

发布了50 篇原创文章 · 获赞 8 · 访问量 1465
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术工厂 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览