📌  相关文章
📜  给定数组中两个偶数之间的最大距离(1)

📅  最后修改于: 2023-12-03 15:41:16.923000             🧑  作者: Mango

给定数组中两个偶数之间的最大距离

本题要求编写一个函数,输入一个由正整数构成的数组,返回数组中两个相邻的偶数之间的最大距离(也就是这两个偶数之间其他数的个数,包括这两个偶数)。

输入格式

数组大小 $n$,以及 $n$ 个正整数,用空格隔开。

输出格式

一个整数,表示数组中两个偶数之间的最大距离。如果数组中没有相邻的偶数,则输出 -1。

输入样例1
6 1 2 5 6 3 4
输出样例1
3
样例1解释

样例输入中,数组中有两个相邻的偶数 $2$ 和 $6$,它们之间的距离是 $3$。

输入样例2
2 1 5
输出样例2
-1
样例2解释

样例输入中,数组中没有相邻的偶数,因此输出 -1。

算法思路

要找到数组中相邻的两个偶数之间的距离,需要一边遍历数组,一边保存上一个偶数出现的位置。具体地,可以使用一个变量 $lastEven$ 记录数组中上一个偶数出现的位置,初始值为 $-1$。然后遍历数组,如果遇到一个偶数,则更新答案,即将当前偶数位置与 $lastEven$ 的差与当前答案取一个较大值。然后将 $lastEven$ 更新为当前偶数的位置。最终,如果答案仍然等于初始值 $-1$,则说明没有相邻的偶数。

代码实现
def max_distance(n, nums):
    ans = -1
    last_even = -1
    for i in range(n):
        if nums[i] % 2 == 0:
            if last_even != -1:
                ans = max(ans, i - last_even)
            last_even = i
    return ans

# 测试代码
n = 6
nums = [1, 2, 5, 6, 3 ,4]
print(max_distance(n, nums)) # 3
复杂度分析

遍历一遍数组,时间复杂度 $O(n)$,使用两个变量 $ans$ 和 $lastEven$,空间复杂度 $O(1)$。