小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
说明:文章部分内容及图片出自网络,如有侵权请与我本人联系(主页有公众号:小攻城狮学前端)
作者:小只前端攻城狮、 主页:小只前端攻城狮的主页、 来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
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:前缀和
- 从
i = 1开始,循环遍历数组 - 遍历时直接更新当前的数
nums[i] = nums[i] + nums[i - 1]- 最后返回原数组
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;
};
感谢阅读,希望能对你有所帮助,文章若有错误或者侵权,可以在评论区留言或在我的主页添加公众号联系我。
写作不易,如果觉得不错,可以「点赞」+「评论」 谢谢支持❤