每日学习一个算法——重新排列数组(今天有时间,多写一篇)
题目
给你一个数组 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] 。
示例 3:
输入:nums = [3,1,2,10,1]
输出:[3,4,6,16,17]
提示:
1 <= nums.length <= 1000
-10^6 <= nums[i] <= 10^6
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/running-sum-of-1d-array
提示:以下是本篇文章正文内容,下面案例可供参考
一、解题思路
个人的解决方法是,做一个嵌套循环,外部循环控制循环次数(即元素个数),内部循环控制前几个数相加,每次内部循环结束,就将计算的值赋值给Sums[i]。
二、代码实现
1.第一遍
public static int[] jiShu(int[] num){
int[] sums = new int[num.length];
for (int i = 0; i < num.length; i++) {
int M=0;
for (int j = 0; j <= i; j++) {
M=M+num[j];
}
sums[i]=M;
}
return sums;
}
结果天杀的,代码占内存只超过10%的人,运行速度只超过5%的人,看来还是菜。
哦,结果第二次提交,同样的代码,运行速度就超过90%的人了?搞我是吧。
2.第二遍
public static int[] jiShu(int[] num){
for (int i = 1; i < num.length; i++) {
num[i] = num[i-1]+num[i];
}
return num;
}
还就那个,不需要定义新数组,i直接从1开始,反正第一个数的动态和就是自己本身。
然后比如说,num[2]=num[0]+ num[1]+num[2],num[1]=num[0]+ num[1],所以说,num[2]=num[1]+num[2],以此类推,动态和不就是本身加之前的动态和吗。
总结
知识还是浅薄,大佬们的代码又简单又快,多多学习吧。