面试题答案
一键面试let arr = Array.from({length: 1000}, (_, i) => i + 1);
let sum = arr.reduce((acc, num) => {
if (num % 3 === 0) {
num *= 2;
}
return acc + num;
}, 0);
console.log(sum);
优化思路
- 避免中间数组:没有先创建一个新数组存储翻倍后的元素,而是在遍历数组时直接计算总和。使用
reduce
方法可以在遍历数组的同时进行累加操作,减少了额外的空间开销。 - 单次遍历:整个操作仅需一次遍历数组,时间复杂度为O(n),
n
为数组的长度。这样相较于先过滤出能被3整除的元素,翻倍后再求和的多次遍历操作,效率更高。