2020-09-04

tech2026-08-10  2

每日学习一个算法——重新排列数组(今天有时间,多写一篇)

题目一、解题思路二、更新代码 1.第一遍2.第二遍总结

 


题目

给你一个数组 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],以此类推,动态和不就是本身加之前的动态和吗。

总结

知识还是浅薄,大佬们的代码又简单又快,多多学习吧。

最新回复(0)