可被三整除的偶数的平均值

标签: 数组 数学

难度: Easy

给你一个由正整数组成的整数数组 nums ,返回其中可被 3 整除的所有偶数的平均值。

注意:n 个元素的平均值等于 n 个元素 求和 再除以 n ,结果 向下取整 到最接近的整数。

示例 1:

输入:nums = [1,3,6,10,12,15]
输出:9
解释:6 和 12 是可以被 3 整除的偶数。(6 + 12) / 2 = 9 。

示例 2:

输入:nums = [1,2,4,7,10]
输出:0
解释:不存在满足题目要求的整数,所以返回 0 。

提示:

  • 1 <= nums.length <= 1000
  • 1 <= nums[i] <= 1000

Submission

运行时间: 27 ms

内存: 16.1 MB

from typing import List

class Solution:
    def averageValue(self, nums: List[int]) -> int:
        divisible_sum = 0
        count = 0

        for num in nums:
            if num % 2 == 0 and num % 3 == 0:  # 检查数字是否是偶数且能被3整除
                divisible_sum += num
                count += 1

        if count == 0:
            return 0
        else:
            return divisible_sum // count  # 使用整数除法来向下取整

solution = Solution()
nums = [1, 3, 6, 10, 12, 15]
result = solution.averageValue(nums)
print(result)  # 输出: 9

nums = [1, 2, 4, 7, 10]
result = solution.averageValue(nums)
print(result)  # 输出: 0

Explain

该题解的思路是遍历整数数组nums,对于每个数字,检查它是否是偶数且能被3整除。如果是,那么将它加到divisible_sum中,并且增加计数器count的值。遍历完成后,如果count为0,说明没有找到符合条件的数字,返回0;否则,返回divisible_sum除以count的结果,使用整数除法以确保结果向下取整。

时间复杂度: O(n)

空间复杂度: O(1)

from typing import List

class Solution:
    def averageValue(self, nums: List[int]) -> int:
        divisible_sum = 0  # 存储可被3整除的偶数之和
        count = 0  # 计数器,记录符合条件的数字数量

        for num in nums:
            if num % 2 == 0 and num % 3 == 0:  # 检查数字是否是偶数且能被3整除
                divisible_sum += num
                count += 1

        if count == 0:
            return 0  # 如果没有符合条件的数字,返回0
        else:
            return divisible_sum // count  # 返回平均值,使用整数除法以确保结果向下取整

solution = Solution()
nums = [1, 3, 6, 10, 12, 15]
result = solution.averageValue(nums)
print(result)  # 输出: 9

nums = [1, 2, 4, 7, 10]
result = solution.averageValue(nums)
print(result)  # 输出: 0

Explore

检查一个数是否能同时被2和3整除与检查这个数是否能被6整除是等价的,因为2和3是互质的,它们的最小公倍数是6。在编程实践中,直接检查能否被6整除同样有效。然而,分开检查可能使代码的意图更加明显,特别是对于初学者,这有助于理解数学概念如最小公倍数和互质关系。

如果`nums`数组中所有数字都满足条件,即所有数字都是偶数且能被3整除,那么`count`的值将等于数组`nums`的长度,因为每个数字都会被计入计数器。同样,`divisible_sum`将是数组中所有这些数字的总和。这种情况下,算法将返回所有符合条件的数的平均值。

不需要检查`divisible_sum`的值。如果`count`为0,意味着没有任何数字符合条件,因此`divisible_sum`自然也会是0,因为没有任何值被加入到总和中。在这种情况下,直接返回0是合理的,因为平均值的计算没有意义(即没有元素来计算平均)。

在Python中,`//`运算符表示整数除法,总是会向下取整,返回两个数相除的整数部分,而不考虑结果的正负。而`int()`函数将浮点数转换成整数时,采用的是向零取整,即丢弃小数部分。例如,`5.9`用`int()`转换后为`5`,而使用`//`进行除法如`5.9 // 1`结果也为`5`。区别主要在于处理负数时,例如`-5.9 // 1`结果为`-6`,而`int(-5.9)`结果为`-5`。