刷题系列之1480 一维数组的动态和

132 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情

题目来源与分析

来源 leetcode.cn/problems/ru…

给你一个数组 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个元素累加,然后赋值给新数组对应的值。

image.png 我们在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]。

总结

今天这篇题目算是简单难度的,当作一个开始,后续坚持刷题吧。