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

36 阅读4分钟

青训营刷题笔记

问题描述

小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

样例2:

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

题目分析

1. 问题背景

小C定义了一种特殊的数,称为“完美偶数”。根据题目描述,完美偶数需要满足两个条件:

  • 偶数性:该数必须是偶数。
  • 范围约束:该数必须在给定的区间 ([l, r]) 之间。

小C有一个长度为 (n) 的数组 (a),她想要统计这个数组中满足“完美偶数”条件的元素个数。

2. 输入输出要求

  • 输入

    • 整数 (n):数组的长度。
    • 整数 (l):区间的下界。
    • 整数 (r):区间的上界。
    • 数组 (a):长度为 (n) 的正整数数组。
  • 输出

    • 输出一个整数,表示数组中满足“完美偶数”条件的元素个数。

3. 示例分析

  • 示例 1

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

    • 处理过程:

      • 检查每个元素:

        • 1:不是偶数。
        • 2:不是在 [3, 8] 范围内。
        • 6:是偶数且在范围内。
        • 8:是偶数且在范围内。
        • 7:不是偶数。
      • 满足条件的元素有 6 和 8。

    • 输出:2

  • 示例 2

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

    • 处理过程:

      • 检查每个元素:

        • 12:是偶数且在范围内。
        • 15:不是偶数。
        • 18:是偶数且在范围内。
        • 9:不是偶数。
      • 满足条件的元素有 12 和 18。

    • 输出:2

  • 示例 3

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

    • 处理过程:

      • 检查每个元素:

        • 2:是偶数且在范围内。
        • 4:是偶数且在范围内。
        • 6:是偶数且在范围内。
      • 满足条件的元素有 2、4 和 6。

    • 输出:3

4. 解决方案

为了实现这个统计功能,可以考虑以下步骤:

  1. 初始化计数器:用一个变量来统计满足条件的完美偶数的数量。

  2. 遍历数组:逐个遍历数组中的元素。

  3. 条件判断

    • 检查当前元素是否为偶数(使用取模运算 x % 2 == 0)。
    • 检查当前元素是否在给定的范围内(使用条件 l ≤ x ≤ r)。
  4. 更新计数器:如果当前元素满足上述两个条件,则计数器加一。

  5. 返回结果:最后返回计数器的值,表示完美偶数的数量。

5. 时间复杂度

  • O(n) :因为我们需要遍历整个数组一次,时间复杂度为线性。

6. 空间复杂度

  • O(1) :只使用了常量级别的额外空间来存储计数器,不依赖于输入规模。

7. 进一步的思考

  • 输入验证:可以考虑对输入进行验证,例如确保数组长度 (n) 与实际数组长度一致,且数组元素均为正整数。
  • 扩展功能:可以扩展函数,使其能够处理多个区间或不同的偶数定义(如“完美奇数”)。
  • 性能优化:在处理极大的数组时,可以考虑并行处理,利用多线程或其他并行计算方法来加速统计过程。

8. 总结

这个问题是一个基础的数组遍历和条件判断的问题,通过简单的逻辑实现了对“完美偶数”的统计。它考察了基本的编程能力和对条件判断的理解,适合用来练习数组的处理和基本算法的应用。掌握这类问题的解决方法对于进一步学习更复杂的数据结构和算法是非常重要的。

c++代码 #include #include #include

using namespace std;

int solution(int n, int l, int r, vector& a) { int sum = 0; for (int i = 0; i < n; i++) { if (a[i] % 2 == 0 && a[i] >= l && a[i] <= r) { sum++; } } return sum; }

int main() { vector a1 = {1, 2, 6, 8, 7}; cout << (solution(5, 3, 8, a1) == 2) << endl;

vector<int> a2 = {12, 15, 18, 9};
cout << (solution(4, 10, 20, a2) == 2) << endl;

vector<int> a3 = {2, 4, 6};
cout << (solution(3, 1, 10, a3) == 3) << endl;

}