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

65 阅读3分钟

小C的任务是找到数组中满足特定条件的“完美偶数”。我们可以将题目分解为以下几点:

  1. 定义条件:一个数字是“完美偶数”需要满足以下两个条件:

    • 它是偶数(即可以被2整除)。
    • 它的值在区间 [l,r][l,r] 内(包括边界)。
  2. 输入数据

    • 一个整数 nn:表示数组的长度。
    • 两个整数 l,rl,r:表示完美偶数的区间范围。
    • 一个数组 aa:包含 nn 个正整数。
  3. 输出结果

    • 返回数组中满足“完美偶数”条件的元素个数。

解题思路

  1. 遍历数组

    • 我们需要遍历数组的每一个元素 numnum。
  2. 判断条件

    • 偶数条件:使用 num % 2 == 0 判断 numnum 是否是偶数。
    • 区间条件:检查 numnum 是否满足 l≤num≤rl≤num≤r。
  3. 统计计数

    • 如果当前数字满足上述两个条件,将计数器 countcount 加1。
  4. 返回结果

    • 最后返回 countcount,即满足条件的数字的总个数。
    # 初始化计数器
    count = 0

    # 遍历数组
    for num in a:
        # 检查是否满足完美偶数的两个条件
        if num % 2 == 0 and l <= num <= r:
            count += 1

    return count


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

样例详解

样例 1

输入:n = 5, l = 3, r = 8, a = [1, 2, 6, 8, 7]

  1. 遍历数组:

    • 1:不是偶数,跳过。
    • 2:是偶数,但不在区间 [3,8][3,8] 内,跳过。
    • 6:是偶数且在区间 [3,8][3,8] 内,计数器加1。
    • 8:是偶数且在区间 [3,8][3,8] 内,计数器加1。
    • 7:不是偶数,跳过。
  2. 最终计数器:2

输出:2


样例 2

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

  1. 遍历数组:

    • 12:是偶数且在区间 [10,20][10,20] 内,计数器加1。
    • 15:不是偶数,跳过。
    • 18:是偶数且在区间 [10,20][10,20] 内,计数器加1。
    • 9:不是偶数,跳过。
  2. 最终计数器:2

输出:2


样例 3

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

  1. 遍历数组:

    • 2:是偶数且在区间 [1,10][1,10] 内,计数器加1。
    • 4:是偶数且在区间 [1,10][1,10] 内,计数器加1。
    • 6:是偶数且在区间 [1,10][1,10] 内,计数器加1。
  2. 最终计数器:3

输出:3


优化与扩展

优化方法

  1. 使用列表解析

    • 可以用列表解析将满足条件的元素过滤出来,然后直接统计长度。

    • 示例代码:

      python
      复制代码
      def solution(n: int, l: int, r: int, a: list) -> int:
          return len([num for num in a if num % 2 == 0 and l <= num <= r])
      
  2. 时间复杂度

    • 遍历数组需要 O(n)O(n) 的时间复杂度。
    • 过滤和计数操作效率很高,适合大规模数据。

总结

  1. 核心知识点

    • 使用 num % 2 == 0 判断偶数。
    • 使用 l <= num <= r 检查区间范围。
    • 遍历数组并进行条件判断与统计。
  2. 代码简洁性

    • 原始实现与优化版本都非常简洁,代码易读性高。
  3. 适用场景

    • 题目适合入门级编程练习,考察基础条件判断与循环处理能力。
    • 类似的逻辑可以用于数据筛选和统计分析场景。