赞
踩
给你一个数组 nums 。数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]…nums[i]) 。
请返回 nums 的动态和。
示例:
输入:nums = [1,2,3,4] 输出:[1,3,6,10] 解释:动态和计算过程为 [1, 1+2, 1+2+3, 1+2+3+4] 。
题目来源:https://leetcode-cn.com/problems/running-sum-of-1d-array
首先,为了保存数组动态和,我们可以额外开辟一个新数组用来保存数据,实现方法如下:
- #include<stdio.h>
- #include<assert.h>
- #include<malloc.h>
- int* runningSum(int* nums, int numsSize, int* returnSize)
- {
- assert(nums != NULL);
- if (NULL == nums)
- {
- printf("指针为空");
- return NULL;
- }
- int tmp = 0;
- for (int i = 0; i < numsSize; i++)
- {
- tmp = tmp + nums[i];
- returnSize[i] = tmp;
- }
- return returnSize;
- }
-
- int main()
- {
- int nums[] = { 1,5,8,9 };
- int numsSize = sizeof(nums) / sizeof(nums[0]);
- int* tmp = (int*)malloc(numsSize * sizeof(int));
- runningSum(nums, numsSize,tmp);
- for (int i = 0; i < numsSize; i++)
- {
- printf("%d ", tmp[i]);
- }
- free(tmp);
- return 0;
- }


但是额外开辟数组会占据额外的空间,因此我们可以直接对原数组上修改,方法如下:
- #include<stdio.h>
- #include<assert.h>
- #include<malloc.h>
- int* runningSum(int* nums, int numsSize)
- {
- assert(nums != NULL);
- if (NULL == nums)
- {
- printf("指针为空");
- return NULL;
- }
- for (int i = 1; i < numsSize; i++)
- {
- nums[i] = nums[i - 1] + nums[i];
- }
- return nums;
- }
-
- int main()
- {
- int nums[] = { 1,5,8,9 };
- int numsSize = sizeof(nums) / sizeof(nums[0]);
-
- runningSum(nums, numsSize);
- for (int i = 0; i < numsSize; i++)
- {
- printf("%d ", nums[i]);
- }
-
- return 0;
- }


Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。