文科生勇闯ai刷题47. 完美偶数计数 | 豆包MarsCode AI刷题

10 阅读4分钟

问题描述

小C定义了一个“完美偶数”。一个正整数 xx 被认为是完美偶数需要满足以下两个条件:

  1. xx 是偶数;
  2. 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解题思路

问题理解

我们需要在一个数组中找出满足以下两个条件的元素数量:

  1. 该元素是偶数。
  2. 该元素在给定的区间 [l, r] 之间。

数据结构选择

  • 数组 a:用于存储输入的数字。
  • 整数 l 和 r:定义区间的上下界。
  • 整数 n:数组的长度。

算法步骤

  1. 初始化计数器:用于记录满足条件的元素数量。

  2. 遍历数组:逐个检查数组中的元素。

  3. 检查条件

    • 检查元素是否为偶数(即 num % 2 == 0)。
    • 检查元素是否在区间 [l, r] 之间(即 l <= num <= r)。
  4. 更新计数器:如果元素满足上述两个条件,则计数器加一。

  5. 返回结果:遍历结束后,返回计数器的值。

总结

通过遍历数组并检查每个元素是否满足条件,我们可以有效地统计出满足条件的元素数量。这个方法的时间复杂度是 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