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 <= 10001 <= nums[i] <= 1000
解题思路
解题思路
这道题要求找到所有既是偶数又能被3整除的数字,然后计算它们的平均值。
关键观察
根据题目提示,如果一个数既能被2整除(偶数)又能被3整除,那么它一定能被6整除。这是因为2和3互质,所以同时被2和3整除等价于被6整除。
解法一:直接遍历判断条件
遍历数组,对每个数字检查是否同时满足:
- 是偶数(
num % 2 == 0) - 能被3整除(
num % 3 == 0)
解法二:优化判断条件(推荐)
利用数学性质,直接判断是否能被6整除(num % 6 == 0),这样只需要一次模运算。
算法步骤:
- 遍历数组,找出所有能被6整除的数字
- 计算这些数字的总和和个数
- 如果没有符合条件的数字,返回0
- 否则返回总和除以个数的结果(整数除法自动向下取整)
代码实现
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 |