第一次刷 LeetCode,找了一个很简单的题,虽然做出来了,但是自己的算法也太复杂了,看了解析,才发现原来真的是很简单;
题目如下:
给你一个数组 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]
自己的算法及代码:
- 定义一个 int 类型的 numsSum = 0,用来存储每次累加的和;
- 定义一个 int 类型的 runningSum 数组,长度为 nums.length,用于存放最终的输出结果,同时作为函数返回值;
public class Solution {
public int[] runningSum(int[] nums){
int[] running = new int[nums.length];
for (int i = 0; i < nums.length; i++){
int numsSum = 0;
for (int j = 0; j <= i; j++){
numsSum = numsSum + nums[j];
}
running[i] = numsSum;
}
return running;
}
public static void main(String[] args) {
int[] a = new int[]{1,2,3,4};
Solution s = new Solution();
int[] result = s.runningSum(a);
for (int i = 0; i < result.length; i++){
System.out.println(result[i]);
}
}
}
改进的算法及代码:
- 用原始数组 nums 计算累加和,倒着加,每次从第 i 个元素开始,累加第 i 个元素以及它之前的所有元素;
- 不用创建新的数组,开辟新的空间,并且循环只需要一层即可;
public class Solution {
public int[] runningSum(int[] nums) {
for( int i = 1 ; i < nums.length ; i++ ){
nums[i] += nums[i-1];
}
return nums;
}
}