完美偶数计数
题目描述
小C定义了一种“完美偶数”,即一个正整数满足以下两个条件:
-
它是偶数。
-
它的值在区间
[l, r]之间。
小C有一个长度为 n 的数组 a,需要计算其中有多少个“完美偶数”。
题目解析
- 解题思路:
遍历数组筛选: 题目要求统计符合条件的元素,可以通过遍历数组中的每个数,依次判断是否满足条件。
条件判断:
是否是偶数:可以通过取模运算 x % 2 == 0 判断。
是否在区间 [l, r] 内:可以通过范围判断 l <= x <= r 来实现。
计数统计: 每当找到一个满足条件的元素,将计数器加一,最终输出计数结果。
- 代码实现的结构:
方法 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);
}
}
代码说明:
-
num % 2 == 0判断是否是偶数。 -
num >= l && num <= r检查是否在范围[l, r]内。 -
使用
foreach遍历数组,代码更简洁。
运行结果:
个人思考与分析
- 问题的核心难点:
条件的组合判断: 这里需要判断两个条件同时成立,这属于“与”逻辑操作。如果忽略任意一个条件,都会导致结果错误。例如,若只判断偶数而忽略范围,可能统计到范围外的数。
- 关于解法的效率:
时间复杂度: 遍历整个数组的时间复杂度是 O(n),因为每个元素只检查一次。
空间复杂度: 代码中只用了常数额外空间,空间复杂度是 O(1)。
- 从中学到了什么:
掌握了通过遍历结合逻辑条件筛选元素的基本模式。常涉及以下几个步骤:定义遍历方式、应用逻辑条件、筛选元素。常见的遍历方式和逻辑条件筛选元素的模式有:
- 使用for循环遍历
for循环是最基本的遍历方式,适用于大多数编程语言。通过遍历数组或列表,对每个元素应用逻辑条件,满足条件的元素被筛选出来。
- 使用forEach方法遍历
forEach方法是数组的一个方法,用于遍历数组并对每个元素执行函数。通过在回调函数中应用逻辑条件,可以筛选出满足条件的元素。
- 使用filter方法筛选
filter方法是数组的一个内置方法,直接返回一个新数组,包含所有通过测试(函数返回true)的元素。
- 使用map方法结合filter方法
虽然map方法主要用于创建新数组,但它可以结合filter方法使用来筛选元素
理解了条件判断的“与”和“或”逻辑的实际应用。