完美偶数计数 | 豆包MarsCode AI刷题

94 阅读2分钟

题目描述

小C定义了一个“完美偶数”。一个正整数 xx 被认为是完美偶数需要满足以下两个条件:

  1. xx 是偶数;
  2. xx 的值在区间 [l,r][l, r] 之间。

现在,小C有一个长度为 nn 的数组 aa,她想知道在这个数组中有多少个完美偶数。

测试样例

输入:

  • 样例1:n=5,l=3,r=8,a=[1,2,6,8,7]n = 5, l = 3, r = 8, a = [1, 2, 6, 8, 7]
  • 样例2:n=4,l=10,r=20,a=[12,15,18,9]n = 4, l = 10, r = 20, a = [12, 15, 18, 9]
  • 样例3:n=3,l=1,r=10,a=[2,4,6]n = 3, l = 1, r = 10, a = [2, 4, 6]

输出:

  • 样例1:22
  • 样例2:22
  • 样例3:33

解题思路

  1. 理解条件:一个数字是否满足“完美偶数”的条件,需要判断两个方面:

    • 它是偶数:判断条件是 x%2==0x \% 2 == 0
    • 它在区间 [l,r][l, r] 内:判断条件是 lxrl \leq x \leq r
  2. 任务:遍历数组 aa,统计满足上述两个条件的数字的个数。

  3. 实现细节

    • 遍历数组,用一个列表推导式筛选满足条件的数字。
    • 使用 sum 函数统计满足条件的数字个数。
  4. 时间复杂度

    • 遍历数组的时间复杂度是 O(n)O(n),其中 nn 是数组的长度。
    • 筛选时的判断是常数操作,总体复杂度是 O(n)O(n)

代码实现

def solution(n: int, l: int, r: int, a: list) -> int:
    """
    统计数组中满足条件的完美偶数个数。
    
    参数:
    - n (int): 数组的长度。
    - l (int): 区间的左端点。
    - r (int): 区间的右端点。
    - a (list): 待检查的整数数组。

    返回:
    - int: 满足条件的完美偶数个数。
    """
    # 使用列表推导式筛选符合条件的数字并计数
    return sum(1 for x in a if x % 2 == 0 and l <= x <= r)

# 测试代码
if __name__ == '__main__':
    # 测试样例1
    print(solution(5, 3, 8, [1, 2, 6, 8, 7]) == 2)  # 输出:True
    # 测试样例2
    print(solution(4, 10, 20, [12, 15, 18, 9]) == 2)  # 输出:True
    # 测试样例3
    print(solution(3, 1, 10, [2, 4, 6]) == 3)  # 输出:True

测试结果

运行代码后得到以下输出:

True
True
True

表示所有测试样例的输出都符合预期。


总结

  1. 优点

    • 使用列表推导式,代码简洁且高效。
    • 时间复杂度为 O(n)O(n),在较大规模数据下也能高效运行。
  2. 适用场景

    • 此解法适用于筛选满足简单条件的数组元素并进行统计。
    • 特别适合数据规模较大的情景。
  3. 扩展

    • 如果条件更复杂,可以使用更通用的筛选函数,例如 filter
    • 代码可拓展为处理其他数据类型或增加更多筛选条件。
  4. 注意事项

    • 确保输入数组和区间的合法性,例如 nn 和数组长度一致,[l,r][l, r] 是有效区间。