📅  最后修改于: 2023-12-03 14:49:32.299000             🧑  作者: Mango
给定一个整数数组 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