📌  相关文章
📜  任何大小为 K 的子数组中存在的最大偶数(1)

📅  最后修改于: 2023-12-03 14:49:32.299000             🧑  作者: Mango

任何大小为 K 的子数组中存在的最大偶数

给定一个整数数组 nums 和一个整数 k,请找出任意大小为 k 的子数组中存在的最大偶数。如果不存在偶数,则返回 -1。

解题思路

我们可以使用滑动窗口来实现这个问题。首先,我们可以从左到右遍历数组,每次取 k 个数字组成一个子数组。然后,我们可以检查这个子数组中是否存在偶数,如果存在就返回最大的偶数,如果不存在就继续取下一个子数组。

具体实现时,我们可以使用两个指针 left 和 right,它们分别表示当前子数组的左边界和右边界。我们可以先将右边界 right 移动 k 个单位,这样就可以得到第一个子数组。然后,我们可以依次将左边界 left 和右边界 right 按顺序向右移动一个单位,并检查新的子数组中是否存在偶数。如果存在偶数,我们就更新最大的偶数值,然后继续向右移动指针。如果不存在偶数,我们就直接让 right 移动一个单位,得到下一个子数组。这个过程一直持续到 right 超出数组范围为止。

复杂度分析

时间复杂度:O(n),其中 n 是数组的长度。我们需要遍历整个数组一次,并对每个大小为 k 的子数组进行判断。

空间复杂度:O(1)。

代码实现
def findMaxEven(nums, k):
    maxEven = -1
    left, right = 0, k - 1
    while right < len(nums):
        for i in range(left, right + 1):
            if nums[i] % 2 == 0:
                maxEven = max(maxEven, nums[i])
        left += 1
        right += 1
    return maxEven
示例

输入: nums = [1,2,3,4,5], k = 3 输出: 4

输入: nums = [2,2,2,2,2], k = 2 输出: 2

输入: nums = [1,3,5], k = 1 输出: -1