📅  最后修改于: 2023-12-03 15:10:37.737000             🧑  作者: Mango
这个问题可以通过动态规划来解决。我们可以定义两个数组 even 和 odd,用来记录以当前元素为结尾的最长偶数子数组和最长奇数子数组的长度。然后我们可以维护一个变量 max_len,用来记录最长满足条件的子数组的长度。
对于当前的元素 nums[i],如果是偶数,则 even[i] = even[i-1] + 1,odd[i] = odd[i-1](因为不能以偶数结尾的子数组不满足条件)。如果是奇数,则 odd[i] = odd[i-1] + 1,even[i] = even[i-1]。如果是0,则 even[i] = even[i-1],odd[i] = odd[i-1]。最后,我们可以更新 max_len,使其等于 even[i] 或 odd[i] 中的较大值。
下面是实现这个算法的 Python 代码片段:
def max_len_of_subarray(nums: List[int]) -> int:
n = len(nums)
even = [0] * n
odd = [0] * n
max_len = 0
for i in range(n):
if nums[i] % 2 == 0:
even[i] = even[i-1] + 1
odd[i] = odd[i-1]
elif nums[i] % 2 == 1:
odd[i] = odd[i-1] + 1
even[i] = even[i-1]
else:
even[i] = even[i-1]
odd[i] = odd[i-1]
max_len = max(max_len, even[i], odd[i])
return max_len
这个算法的时间复杂度为 O(n),空间复杂度为 O(n),其中 n 是数组的长度。