完美偶数计数
问题描述
小C定义了一个“完美偶数”。一个正整数 xx 被认为是完美偶数需要满足以下两个条件:
- xx 是偶数;
- xx 的值在区间 [l,r][l,r] 之间。
现在,小C有一个长度为 nn 的数组 aa,她想知道在这个数组中有多少个完美偶数。
测试样例
样例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
样例3:
输入:
n = 3,l = 1,r = 10,a = [2, 4, 6]
输出:3
为了求解这个问题,我们可以按以下步骤来实现:
问题分析
给定数组 a 和区间 [l, r],我们需要统计数组中所有符合以下条件的“完美偶数”:
- 数字是偶数;
- 数字在区间
[l, r]范围内。
思路
-
遍历数组
a中的每个元素x。 -
对于每个元素:
- 检查它是否是偶数:
x % 2 == 0。 - 检查它是否在给定的区间
[l, r]内:l <= x <= r。
- 检查它是否是偶数:
-
如果满足以上两个条件,就将计数器加 1。
代码实现
pythonCopy Code
def count_perfect_even(n, l, r, a):
# 计数器,用于统计完美偶数的个数
count = 0
for x in a:
if x % 2 == 0 and l <= x <= r:
count += 1
return count
# 测试样例
print(count_perfect_even(5, 3, 8, [1, 2, 6, 8, 7])) # 输出: 2
print(count_perfect_even(4, 10, 20, [12, 15, 18, 9])) # 输出: 2
print(count_perfect_even(3, 1, 10, [2, 4, 6])) # 输出: 3
代码解释
-
count_perfect_even(n, l, r, a):这是主函数,接受四个参数:n: 数组的长度(虽然我们不需要直接使用它,Python 的列表长度可以通过len(a)自动获取)。l和r: 区间的左右边界。a: 输入的数组。
-
遍历数组:我们遍历数组
a中的每个元素x,检查其是否符合两个条件:x % 2 == 0:检查x是否是偶数。l <= x <= r:检查x是否在区间[l, r]内。
-
计数:如果满足这两个条件,就将
count加 1。 -
返回结果:最后返回统计到的“完美偶数”的数量。
测试样例
- 样例1: 输入:
n = 5,l = 3,r = 8,a = [1, 2, 6, 8, 7]
输出:2
解释:数组中只有6和8满足条件,它们是偶数且在区间[3, 8]内。 - 样例2: 输入:
n = 4,l = 10,r = 20,a = [12, 15, 18, 9]
输出:2
解释:数组中的12和18满足条件,它们是偶数且在区间[10, 20]内。 - 样例3: 输入:
n = 3,l = 1,r = 10,a = [2, 4, 6]
输出:3
解释:数组中的2、4和6满足条件,它们都是偶数且在区间[1, 10]内。
时间复杂度
- 遍历数组
a一次,时间复杂度是O(n),其中n是数组a的长度。 - 因此,总的时间复杂度是
O(n)。
空间复杂度
- 我们只使用了常量空间(除了输入数组),因此空间复杂度是
O(1)。
这个方法足够高效,适用于大部分输入规模。