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

89 阅读2分钟

题目描述

小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 遍历数组,代码更简洁。

 

运行结果:

 

image.png

 

个人思考与分析

 

  1. 问题的核心难点:

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

 

  1. 关于解法的效率:

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

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

 

 

  1. 从中学到了什么:

    掌握了通过遍历结合逻辑条件筛选元素的基本模式。

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