🌈【LeetCode.8 一维数组动态和】- JavaScript =>动态规划+前缀和+内置函数

522 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。


说明:文章部分内容及图片出自网络,如有侵权请与我本人联系(主页有公众号:小攻城狮学前端)

作者:小只前端攻城狮、 主页:小只前端攻城狮的主页、 来源:掘金

GitHub:P-J27、 CSDN:PJ想做前端攻城狮

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


1480. 一维数组的动态和

题意描述

给你一个数组nums。数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]…nums[i])

请返回nums的动态和。

示例 1:

输入:nums = [1,2,3,4]
输出:[1,3,6,10]
解释:动态和计算过程为 [1, 1+2, 1+2+3, 1+2+3+4]

示例 2:

输入:nums = [1,1,1,1,1]
输出:[1,2,3,4,5]
解释:动态和计算过程为 [1, 1+1, 1+1+1, 1+1+1+1, 1+1+1+1+1]

思路1:前缀和

  1. i = 1开始,循环遍历数组
  2. 遍历时直接更新当前的数
  3. nums[i] = nums[i] + nums[i - 1]
  4. 最后返回原数组nums
const runningSum = nums => {
    const len = nums.length;
    for (let i = 1; i < len; i++) {
        nums[i] += nums[i - 1];
    }
    return nums;
};

思路2:动态规划DP

分析:使用动态规划思想来处理,依次存储前面的值。

var runningSum = function(nums) {
    let res = [];
    let len = nums.length;
    let dp = new Array(len).fill(0);

    dp[0] = nums[0]
    for(let i=1; i<len; i++) {
        dp[i] = dp[i-1] + nums[i] 
    }
    return dp;
};

思路3:高阶函数

map版

分析:都知道map() 方法创建一个新数组,返回该数组中的每个元素是调用一次提供的函数后的返回。求加工情况的神器。

var runningSum = function(nums) {
  let num = null;
  let result = nums.map((item) => (num += item));
  return result;
};
reduce版
var runningSum = function(nums) {
	let newNums = [];
	nums.reduce((pre, now, index)=>{
		newNums.push(pre);
		if(index === nums.length-1){
			newNums.push(pre + now);
		}
		return pre + now;
	},0);
	return newNums;
};

感谢阅读,希望能对你有所帮助,文章若有错误或者侵权,可以在评论区留言或在我的主页添加公众号联系我。

写作不易,如果觉得不错,可以「点赞」+「评论」 谢谢支持❤