1480. 一维数组的动态和 |刷题打卡

198 阅读1分钟

本文正在参与掘金团队号上线活动,点击 查看大厂春招职位

一、题目描述

本题来自1480. 一维数组的动态和

image.png

二、思路分析

遍历数组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,欢迎补充~