leetcode__滑动窗口最大值__python

本文介绍了一种求解滑动窗口中最大值问题的有效算法。该算法通过维护一个列表来跟踪窗口内的最大值候选,并确保列表始终有序,从而实现O(n)的时间复杂度。适用于需要快速找出一系列数据中特定窗口大小的最大值的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解题思路:

如果只是想做大这件事件非常简单,在每一段都取max即可,但是显然这样当k=n/2
的时候不符合线性时间复杂度的要求,所以我们维护一个列表,放其中的k个数字,然后没加入一个新的数字的时候都对其做一定的判断,将不满足条件的元素变为false,然后pop掉最前面的元素以及前面的所有false,然后非常容易可以找到最大值。
具体代码如下:

class Solution:
    def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
        res = []
        if not nums:
            return res
        if k == 1:
            return nums
        self.data = [nums[0]]
        for i in range(1, k):
            for j in range(i)[::-1]:
                if self.data[j] != False and self.data[j] <= nums[i]:
                    self.data[j] = False
                elif self.data[j] != False and self.data[j] > nums[i]:
                    break
            self.data.append(nums[i])
        false_count = 0
        while self.data[0] == False:
            false_count += 1
            self.data = self.data[1:]
        res.append(self.data[0])
        for idx in range(k, len(nums)):
            #先append对应的元素并把前面的变成false
            for i in range(len(self.data))[::-1]:
                if self.data[i] != False and self.data[i] <= nums[idx]:
                    self.data[i] = False
                elif self.data[i] != False and self.data[i] > nums[idx]:
                    break
            self.data.append(nums[idx])
            if false_count == 0:
                self.data = self.data[1:]
            else:
                false_count -= 1
            while self.data[0] == False:
                self.data = self.data[1:]
                false_count += 1
            res.append(self.data[0])
        return res
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值