持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情
题目来源与分析
给你一个数组 nums 。数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]…nums[i]) 。
请返回 nums 的动态和。
分析: 从题目上我们可以分析出要求一个数组的动态和,简单理解就是,已知一个数组,例如[1,2,3,4],就是求一个新的数组,这个数组的元素为:第一个就是已知数组的第一个,第二个就是已知数组的前2个数组相加得到,第二个就是已知数组的前三个数组相加得到,一直到计算结束。即[1,2,3,4]的计算结果为[1,1+2,1+2+3,1+2+3+4]得到[1,3,6,10]就是所求结果。
代码验证与分析
class Solution {
public int[] runningSum(int[] nums) {
//定义一个返回数组
int[] numSums=new int[nums.length];
//循环计算累加数组的和
for(int i=0;i<nums.length;i++){
int sum=0;
//计算第几个就循环第几个前面的累加,如第2个则j<=2,那么就会累加nums[0]、nums[1]、nums[2]的值作为第二个元素
for(int j=0;j<=i;j++){
sum+=nums[j];
}
numSums[i]=sum;
}
return numSums;
}
}
上面是java代码的写法,首先在方法里定义一个要返回结果的数组对象,长度与传递的数组对象一致。
for循环遍历数组,里面定义一个计算累加和的值,在新建一个for循环,计算第n个元素累加,然后赋值给新数组对应的值。
我们在leetcode上可以直接运行代码查看对应的结果,如上图,得到预期结果。
官方答案对比与分析
class Solution {
public int[] runningSum(int[] nums) {
int n = nums.length;
for (int i = 1; i < n; i++) {
nums[i] += nums[i - 1];
}
return nums;
}
}
官方代码是直接改变输入参数返回,相对于省略了在创建一个新数组对象来做操作,直接使用参数对象,在这基础上进行计算与改变,但是思想是一致的。 由于第一个只会累加第一个所以肯定不变,因此官方这里从1开始计算,即第二个元素开始算。 假设n=4,那么我们只需要计算i=1,i=2,i=3,三个值,并且只用做累加上一个值就是我们的结果。 nums[2]=nums[2]+nums[1],此时nums[1]已经是累加过的值了,nums[2] 还是参数的值,计算出新的nums[2]。
总结
今天这篇题目算是简单难度的,当作一个开始,后续坚持刷题吧。