问题描述
小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
解题思路1:暴力法
遍历数组中的每个元素,检查它是否满足完美偶数的条件。
def count_perfect_evens(nums, l, r):
count = 0
for num in nums:
if num % 2 == 0 and l <= num <= r:
count += 1
return count
# 测试样例
nums1 = [1, 2, 3, 4, 5, 6], 2, 8
print(count_perfect_evens(*nums1)) # 输出:3
nums2 = [10, 12, 14, 15, 16], 5, 10
print(count_perfect_evens(*nums2)) # 输出:2
解题思路2:优化法
考虑到我们只需要检查偶数,我们可以在遍历数组时跳过奇数,这样可以减少检查的次数。
def count_perfect_evens_optimized(nums, l, r):
count = 0
for num in nums:
# 直接检查是否为偶数,并且值在区间[l, r]之间
if num % 2 == 0 and l <= num <= r:
count += 1
return count
# 测试样例
nums1 = [1, 2, 3, 4, 5, 6], 2, 8
print(count_perfect_evens_optimized(*nums1)) # 输出:3
nums2 = [10, 12, 14, 15, 16], 5, 10
print(count_perfect_evens_optimized(*nums2)) # 输出:2
在这个方法中,我们没有显式地检查每个数字是否为偶数,而是利用了Python中%
操作符的特性,直接在循环中进行判断。这样,我们避免了对奇数的无用检查,从而提高了效率。
豆包Marscode解题思路
问题理解
我们需要在一个数组中找出满足以下两个条件的元素数量:
- 该元素是偶数。
- 该元素在给定的区间
[l, r]
之间。
数据结构选择
- 数组
a
:用于存储输入的数字。 - 整数
l
和r
:定义区间的上下界。 - 整数
n
:数组的长度。
算法步骤
-
初始化计数器:用于记录满足条件的元素数量。
-
遍历数组:逐个检查数组中的元素。
-
检查条件:
- 检查元素是否为偶数(即
num % 2 == 0
)。 - 检查元素是否在区间
[l, r]
之间(即l <= num <= r
)。
- 检查元素是否为偶数(即
-
更新计数器:如果元素满足上述两个条件,则计数器加一。
-
返回结果:遍历结束后,返回计数器的值。
总结
通过遍历数组并检查每个元素是否满足条件,我们可以有效地统计出满足条件的元素数量。这个方法的时间复杂度是 O(n),其中 n 是数组的长度,因为我们需要遍历整个数组一次。
def solution(n: int, l: int, r: int, a: list) -> int:
count = 0 # 初始化计数器
for num in a: # 遍历数组中的每一个元素
if num % 2 == 0: # 检查是否是偶数
if l <= num <= r: # 检查是否在区间 [l, r] 之间
count += 1 # 如果是,计数器加一
return count # 返回计数器的值
if __name__ == '__main__':
# 测试样例1
print(solution(5, 3, 8, [1, 2, 6, 8, 7]) == 2)
# 测试样例2
print(solution(4, 10, 20, [12, 15, 18, 9]) == 2)
# 测试样例3
print(solution(3, 1, 10, [2, 4, 6]) == 3)
知识点总结
这一题主要涉及以下几个编程知识点:
1. 条件判断
- 偶数判断:使用取模运算符
%
来判断一个数是否为偶数。例如,num % 2 == 0
表示num
是偶数。 - 区间判断:使用比较运算符
<=
和>=
来判断一个数是否在给定的区间[l, r]
之间。例如,l <= num <= r
。
2. 循环
- 遍历数组:使用
for
循环来遍历数组中的每一个元素。例如,for num in a:
。
3. 计数器
- 计数器初始化:使用一个变量来记录满足条件的元素数量,并在循环中根据条件更新计数器。例如,
count = 0
和count += 1
。
4. 函数定义与返回值
- 函数定义:使用
def
关键字定义一个函数,并指定参数和返回值类型。例如,def solution(n: int, l: int, r: int, a: list) -> int:
。 - 返回值:使用
return
语句返回函数的计算结果。例如,return count
。