AcWing 79.滑动窗口的最大值(Python版)

题目描述

给定一个数组和滑动窗口的大小,请找出所有滑动窗口里的最大值。

例如,如果输入数组[2, 3, 4, 2, 6, 2, 5, 1]及滑动窗口的大小3,那么一共存在6个滑动窗口,它们的最大值分别为[4, 4, 6, 6, 6, 5]。
数据保证k大于0,且k小于等于数组长度。

解题思路

1、如果k等于nums数组的长度,则返回nums中最大值
2、如果小于nums数组长度,则可以先遍历前k个元素,找出最大的值的下标记作max_ind,再利用两个指针,头指针指向第k个元素,尾指针指向第2个元素,然后让两个指针同时往后走。如果头指针的值大于max_ind 指向的值,则更新max_ind;需要处理的特殊情况就是,尾指针值大于max_ind(此时滑动窗口已经不包含max_ind指向的最大值了),此时需要遍历滑动窗口的值,更新max_ind。

代码实现

class Solution(object):
    def maxInWindows(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: List[int]
        """
        n = len(nums)
        if k == n:
            max_n = nums[0]
            for i in nums:
                if i > max_n:
                    max_n = i
            return [max_n]
        max_ind = 0
        for i in range(k):		# 遍历前K个值
            if nums[i] >= nums[max_ind]:
                max_ind = i
        pre = k		# 头指针
        rear = 1	# 尾指针
        res = [nums[max_ind]]
        while pre < n:
            if rear > max_ind:		# 尾指针超过max_ind
                max_ind = rear
                for i in range(rear, pre + 1):
                    if nums[i] >= nums[max_ind]:
                        max_ind = i	# 在滑动窗口中更新max_ind
            if nums[pre] >= nums[max_ind]:
                max_ind = pre
            res.append(nums[max_ind])
            pre += 1
            rear += 1
        return res
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值