本文正在参与掘金团队号上线活动,点击 查看大厂春招职位
一、题目描述
本题来自1480. 一维数组的动态和
二、思路分析
遍历数组nums,每次得到前i项数的和且把得到的和push进结果数组。 需要注意的是第一次遍历前i项的和就是第一项的值。
三、AC代码
我这里想到了4种解法,依次是:
1.最开始的想法,加就完了
var runningSum = function(nums) {
let resArr = [], sum = 0;
for(let i = 0;i < nums.length; i++){
sum = nums[i] + sum;
resArr.push(sum);
}
return resArr;
};
2.利用map
var runningSum = function(nums) {
let sum = 0;
return nums.map(item => sum += item);
};
3.山炮解法:因为考虑到第一项有点特殊,所以区分了第一项和后面的项,每次将上一次遍历的结果作为这次遍历的初始值res[i - 1]加上轮到的值num[j],有reduce()那味儿了,好像害行,也不是很山炮~
var runningSum = function(nums) {
let res = [];
let sum = 0;
for(let i = 0; i < nums.length; i++) {
if(i >= 1) {
for (let j = 0; j <= i; j++) {
sum = res[i - 1] + nums[j];
}
} else {
sum = nums[0];
}
res.push(sum);
}
return res;
};
4.利用reduce()的自带累加功能,妙啊~
var runningSum = function(nums) {
nums.reduce((prev, curr, index) => {
nums[index] = prev + curr;
return nums[index];
}, 0);
return nums;
};
四、总结
最先想到的1,1之后想到2,3最山炮,用的时候想到reduce(),又有了最巧妙的4,欢迎补充~