题目描述
小C定义了一个“完美偶数”。一个正整数 被认为是完美偶数需要满足以下两个条件:
- 是偶数;
- 的值在区间 之间。
现在,小C有一个长度为 的数组 ,她想知道在这个数组中有多少个完美偶数。
测试样例
输入:
- 样例1:
- 样例2:
- 样例3:
输出:
- 样例1:
- 样例2:
- 样例3:
解题思路
-
理解条件:一个数字是否满足“完美偶数”的条件,需要判断两个方面:
- 它是偶数:判断条件是 ;
- 它在区间 内:判断条件是 。
-
任务:遍历数组 ,统计满足上述两个条件的数字的个数。
-
实现细节:
- 遍历数组,用一个列表推导式筛选满足条件的数字。
- 使用
sum函数统计满足条件的数字个数。
-
时间复杂度:
- 遍历数组的时间复杂度是 ,其中 是数组的长度。
- 筛选时的判断是常数操作,总体复杂度是 。
代码实现
def solution(n: int, l: int, r: int, a: list) -> int:
"""
统计数组中满足条件的完美偶数个数。
参数:
- n (int): 数组的长度。
- l (int): 区间的左端点。
- r (int): 区间的右端点。
- a (list): 待检查的整数数组。
返回:
- int: 满足条件的完美偶数个数。
"""
# 使用列表推导式筛选符合条件的数字并计数
return sum(1 for x in a if x % 2 == 0 and l <= x <= r)
# 测试代码
if __name__ == '__main__':
# 测试样例1
print(solution(5, 3, 8, [1, 2, 6, 8, 7]) == 2) # 输出:True
# 测试样例2
print(solution(4, 10, 20, [12, 15, 18, 9]) == 2) # 输出:True
# 测试样例3
print(solution(3, 1, 10, [2, 4, 6]) == 3) # 输出:True
测试结果
运行代码后得到以下输出:
True
True
True
表示所有测试样例的输出都符合预期。
总结
-
优点:
- 使用列表推导式,代码简洁且高效。
- 时间复杂度为 ,在较大规模数据下也能高效运行。
-
适用场景:
- 此解法适用于筛选满足简单条件的数组元素并进行统计。
- 特别适合数据规模较大的情景。
-
扩展:
- 如果条件更复杂,可以使用更通用的筛选函数,例如
filter。 - 代码可拓展为处理其他数据类型或增加更多筛选条件。
- 如果条件更复杂,可以使用更通用的筛选函数,例如
-
注意事项:
- 确保输入数组和区间的合法性,例如 和数组长度一致, 是有效区间。