题目解析与学习总结:完美偶数计数 | 豆包MarsCode AI刷题

50 阅读3分钟

完美偶数计数

 

题目描述

小C定义了一种“完美偶数”,即一个正整数满足以下两个条件:

  1. 它是偶数。

  2. 它的值在区间 [l, r] 之间。

 

小C有一个长度为 n 的数组 a,需要计算其中有多少个“完美偶数”。

 

 

 

题目解析

 

  1. 解题思路:

    遍历数组筛选: 题目要求统计符合条件的元素,可以通过遍历数组中的每个数,依次判断是否满足条件。

    条件判断:

      是否是偶数:可以通过取模运算 x % 2 == 0 判断。

      是否在区间 [l, r] 内:可以通过范围判断 l <= x <= r 来实现。

    计数统计: 每当找到一个满足条件的元素,将计数器加一,最终输出计数结果。

 

  1. 代码实现的结构:

    方法 solution(int n, int l, int r, int[] a)

      遍历数组,逐一判断每个元素是否满足两个条件。

      用一个计数器记录满足条件的元素数量。

      返回计数器的值。

 

代码如下(JAVA):

   public class Main {
    public static int solution(int n, int l, int r, int\[] a) {
    // 初始化计数器
    int count = 0;

    // 遍历数组
    for (int num : a) {
        // 检查是否是偶数且在范围内
        if (num % 2 == 0 && num >= l && num <= r) {
            count++;
        }
    }

    // 返回满足条件的计数结果
    return count;
}

public static void main(String[] args) {
    System.out.println(solution(5, 3, 8, new int[]{1, 2, 6, 8, 7}) == 2);
    System.out.println(solution(4, 10, 20, new int[]{12, 15, 18, 9}) == 2);
    System.out.println(solution(3, 1, 10, new int[]{2, 4, 6}) == 3);
}

}

 

代码说明:

  1. num % 2 == 0 判断是否是偶数。

  2. num >= l && num <= r 检查是否在范围 [l, r] 内。

  3. 使用 foreach 遍历数组,代码更简洁。

 

运行结果:

 

转存失败,建议直接上传图片文件 

 

个人思考与分析

 

  1. 问题的核心难点:

    条件的组合判断: 这里需要判断两个条件同时成立,这属于“与”逻辑操作。如果忽略任意一个条件,都会导致结果错误。例如,若只判断偶数而忽略范围,可能统计到范围外的数。

 

  1. 关于解法的效率:

    时间复杂度: 遍历整个数组的时间复杂度是 O(n),因为每个元素只检查一次。

    空间复杂度: 代码中只用了常数额外空间,空间复杂度是 O(1)

 

 

  1. 从中学到了什么:

    掌握了通过遍历结合逻辑条件筛选元素的基本模式。常涉及以下几个步骤:定义遍历方式、应用逻辑条件、筛选元素。常见的遍历方式和逻辑条件筛选元素的模式有:

  1. 使用for循环遍历

for循环是最基本的遍历方式,适用于大多数编程语言。通过遍历数组或列表,对每个元素应用逻辑条件,满足条件的元素被筛选出来。

  1. 使用forEach方法遍历

‌forEach方法是数组的一个方法,用于遍历数组并对每个元素执行函数。通过在回调函数中应用逻辑条件,可以筛选出满足条件的元素。

  1. 使用filter方法筛选

‌filter方法是数组的一个内置方法,直接返回一个新数组,包含所有通过测试(函数返回true)的元素。

  1. 使用map方法结合filter方法

虽然map方法主要用于创建新数组,但它可以结合filter方法使用来筛选元素

理解了条件判断的“与”和“或”逻辑的实际应用。