一、问题描述
小C定义了一个“完美偶数”。一个正整数 x 被认为是完美偶数需要满足以下两个条件:
x是偶数;x的值在区间[l, r]之间。
现在,小C有一个长度为 n 的数组 a,她想知道在这个数组中有多少个完美偶数。
例如:
-
样例 1:输入
n = 5, l = 3, r = 8, a = [1, 2, 6, 8, 7],输出2。- 满足条件的完美偶数是
6和8。
- 满足条件的完美偶数是
-
样例 2:输入
n = 4, l = 10, r = 20, a = [12, 15, 18, 9],输出2。- 满足条件的完美偶数是
12和18。
- 满足条件的完美偶数是
-
样例 3:输入
n = 3, l = 1, r = 10, a = [2, 4, 6],输出3。- 满足条件的完美偶数是
2、4和6。
- 满足条件的完美偶数是
二、解题思路
我们需要通过遍历数组 a,检查每一个数字是否满足以下两个条件:
- 数字是偶数;
- 数字位于区间
[l, r]内。
这两个条件的判断可以通过简单的数学运算和比较完成:
- 判断一个数是否是偶数,可以通过
num % 2 == 0来实现; - 判断一个数是否在区间
[l, r]内,可以通过l <= num <= r来实现。
我们可以通过遍历数组中的每一个元素,对于满足这两个条件的数字进行计数。
三、代码实现
def solution(n: int, l: int, r: int, a: list) -> int:
count = 0 # 用于记录符合条件的完美偶数数量
for num in a:
# 判断 num 是否是偶数且在区间 [l, r] 之间
if num % 2 == 0 and l <= num <= r:
count += 1
return count
# 测试用例
if __name__ == "__main__":
print(solution(5, 3, 8, [1, 2, 6, 8, 7]) == 2) # 输出 2
print(solution(4, 10, 20, [12, 15, 18, 9]) == 2) # 输出 2
print(solution(3, 1, 10, [2, 4, 6]) == 3) # 输出 3
四、知识点总结
- 偶数的判断:
一个数x是偶数,意味着它能够被2整除,即x % 2 == 0。这是一种常见的判断偶数的方法。 - 区间的判断:
判断一个数是否在区间[l, r]内,可以通过简单的比较操作l <= num <= r来实现。如果数值满足区间范围,即可认为它在该区间内。 - 遍历数组:
通过遍历数组中的每个元素,对每个元素进行判断,符合条件的元素进行计数。时间复杂度为O(n),其中n是数组的长度。对于每个元素,只需常数时间进行判断,整体性能良好。 - 时间复杂度分析:
由于我们只遍历了一次数组,因此时间复杂度为O(n),其中n为数组的大小。这对于处理较大的数组是足够高效的。
五、个人总结
通过这道题,我加深了对条件判断和数组遍历的理解。判断偶数和判断区间内的数是基础的条件判断,结合数组的遍历能够高效地求解这类问题。特别是在处理简单条件判断时,理解如何使用取余运算和比较运算,可以帮助我们轻松解决问题。