青训营X豆包MarsCode 学习笔记:完美偶数计数|豆包MarsCode AI刷题

62 阅读3分钟

一、问题描述

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

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

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

例如:

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

    • 满足条件的完美偶数是 68
  • 样例 2:输入 n = 4, l = 10, r = 20, a = [12, 15, 18, 9],输出 2

    • 满足条件的完美偶数是 1218
  • 样例 3:输入 n = 3, l = 1, r = 10, a = [2, 4, 6],输出 3

    • 满足条件的完美偶数是 246

二、解题思路

我们需要通过遍历数组 a,检查每一个数字是否满足以下两个条件:

  1. 数字是偶数;
  2. 数字位于区间 [l, r] 内。

这两个条件的判断可以通过简单的数学运算和比较完成:

  • 判断一个数是否是偶数,可以通过 num % 2 == 0 来实现;
  • 判断一个数是否在区间 [l, r] 内,可以通过 l <= num <= r 来实现。

我们可以通过遍历数组中的每一个元素,对于满足这两个条件的数字进行计数。

三、代码实现

def solution(n: int, l: int, r: int, a: list) -> int:
    count = 0  # 用于记录符合条件的完美偶数数量
    for num in a:
        # 判断 num 是否是偶数且在区间 [l, r] 之间
        if num % 2 == 0 and l <= num <= r:
            count += 1
    return count

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

四、知识点总结

  1. 偶数的判断:
    一个数 x 是偶数,意味着它能够被 2 整除,即 x % 2 == 0。这是一种常见的判断偶数的方法。
  2. 区间的判断:
    判断一个数是否在区间 [l, r] 内,可以通过简单的比较操作 l <= num <= r 来实现。如果数值满足区间范围,即可认为它在该区间内。
  3. 遍历数组:
    通过遍历数组中的每个元素,对每个元素进行判断,符合条件的元素进行计数。时间复杂度为 O(n),其中 n 是数组的长度。对于每个元素,只需常数时间进行判断,整体性能良好。
  4. 时间复杂度分析:
    由于我们只遍历了一次数组,因此时间复杂度为 O(n),其中 n 为数组的大小。这对于处理较大的数组是足够高效的。

五、个人总结

通过这道题,我加深了对条件判断和数组遍历的理解。判断偶数和判断区间内的数是基础的条件判断,结合数组的遍历能够高效地求解这类问题。特别是在处理简单条件判断时,理解如何使用取余运算和比较运算,可以帮助我们轻松解决问题。