青训营X豆包MarsCode 技术训练营第六课 | 豆包MarsCode AI 刷题

24 阅读3分钟

完美偶数计数

问题描述

小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]
输出:2

样例2:

输入:n = 4,l = 10,r = 20,a = [12, 15, 18, 9]
输出:2

样例3:

输入:n = 3,l = 1,r = 10,a = [2, 4, 6]
输出:3

为了求解这个问题,我们可以按以下步骤来实现:

问题分析

给定数组 a 和区间 [l, r],我们需要统计数组中所有符合以下条件的“完美偶数”:

  1. 数字是偶数;
  2. 数字在区间 [l, r] 范围内。

思路

  1. 遍历数组 a 中的每个元素 x

  2. 对于每个元素:

    • 检查它是否是偶数:x % 2 == 0
    • 检查它是否在给定的区间 [l, r] 内:l <= x <= r
  3. 如果满足以上两个条件,就将计数器加 1。

代码实现

pythonCopy Code
def count_perfect_even(n, l, r, a):
    # 计数器,用于统计完美偶数的个数
    count = 0
    for x in a:
        if x % 2 == 0 and l <= x <= r:
            count += 1
    return count

# 测试样例
print(count_perfect_even(5, 3, 8, [1, 2, 6, 8, 7]))  # 输出: 2
print(count_perfect_even(4, 10, 20, [12, 15, 18, 9]))  # 输出: 2
print(count_perfect_even(3, 1, 10, [2, 4, 6]))  # 输出: 3

代码解释

  1. count_perfect_even(n, l, r, a) :这是主函数,接受四个参数:

    • n: 数组的长度(虽然我们不需要直接使用它,Python 的列表长度可以通过 len(a) 自动获取)。
    • l 和 r: 区间的左右边界。
    • a: 输入的数组。
  2. 遍历数组:我们遍历数组 a 中的每个元素 x,检查其是否符合两个条件:

    • x % 2 == 0:检查 x 是否是偶数。
    • l <= x <= r:检查 x 是否在区间 [l, r] 内。
  3. 计数:如果满足这两个条件,就将 count 加 1。

  4. 返回结果:最后返回统计到的“完美偶数”的数量。

测试样例

  1. 样例1: 输入:n = 5, l = 3, r = 8, a = [1, 2, 6, 8, 7]
    输出:2
    解释:数组中只有 68 满足条件,它们是偶数且在区间 [3, 8] 内。
  2. 样例2: 输入:n = 4, l = 10, r = 20, a = [12, 15, 18, 9]
    输出:2
    解释:数组中的 1218 满足条件,它们是偶数且在区间 [10, 20] 内。
  3. 样例3: 输入:n = 3, l = 1, r = 10, a = [2, 4, 6]
    输出:3
    解释:数组中的 246 满足条件,它们都是偶数且在区间 [1, 10] 内。

时间复杂度

  • 遍历数组 a 一次,时间复杂度是 O(n),其中 n 是数组 a 的长度。
  • 因此,总的时间复杂度是 O(n)

空间复杂度

  • 我们只使用了常量空间(除了输入数组),因此空间复杂度是 O(1)

这个方法足够高效,适用于大部分输入规模。