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

解题思路

解题思路

这道题要求找到所有既是偶数又能被3整除的数字,然后计算它们的平均值。

关键观察

根据题目提示,如果一个数既能被2整除(偶数)又能被3整除,那么它一定能被6整除。这是因为2和3互质,所以同时被2和3整除等价于被6整除。

解法一:直接遍历判断条件

遍历数组,对每个数字检查是否同时满足:

  1. 是偶数(num % 2 == 0
  2. 能被3整除(num % 3 == 0

解法二:优化判断条件(推荐)

利用数学性质,直接判断是否能被6整除(num % 6 == 0),这样只需要一次模运算。

算法步骤:

  1. 遍历数组,找出所有能被6整除的数字
  2. 计算这些数字的总和和个数
  3. 如果没有符合条件的数字,返回0
  4. 否则返回总和除以个数的结果(整数除法自动向下取整)

代码实现

class Solution {
public:
    int averageValue(vector<int>& nums) {
        int sum = 0;
        int count = 0;
        
        for (int num : nums) {
            if (num % 6 == 0) {
                sum += num;
                count++;
            }
        }
        
        return count == 0 ? 0 : sum / count;
    }
};
class Solution:
    def averageValue(self, nums: List[int]) -> int:
        sum_val = 0
        count = 0
        
        for num in nums:
            if num % 6 == 0:
                sum_val += num
                count += 1
        
        return 0 if count == 0 else sum_val // count
public class Solution {
    public int AverageValue(int[] nums) {
        int sum = 0;
        int count = 0;
        
        foreach (int num in nums) {
            if (num % 6 == 0) {
                sum += num;
                count++;
            }
        }
        
        return count == 0 ? 0 : sum / count;
    }
}
var averageValue = function(nums) {
    let sum = 0;
    let count = 0;
    
    for (let num of nums) {
        if (num % 2 === 0 && num % 3 === 0) {
            sum += num;
            count++;
        }
    }
    
    return count === 0 ? 0 : Math.floor(sum / count);
};

复杂度分析

复杂度类型复杂度说明
时间复杂度O(n)需要遍历整个数组一次,其中n是数组长度
空间复杂度O(1)只使用了常数额外空间存储sum和count

相关题目