当前位置:   article > 正文

C语言---一维数组动态求和_具体的一维数组动态和

具体的一维数组动态和

给你一个数组 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
 

首先,为了保存数组动态和,我们可以额外开辟一个新数组用来保存数据,实现方法如下:

  1. #include<stdio.h>
  2. #include<assert.h>
  3. #include<malloc.h>
  4. int* runningSum(int* nums, int numsSize, int* returnSize)
  5. {
  6. assert(nums != NULL);
  7. if (NULL == nums)
  8. {
  9. printf("指针为空");
  10. return NULL;
  11. }
  12. int tmp = 0;
  13. for (int i = 0; i < numsSize; i++)
  14. {
  15. tmp = tmp + nums[i];
  16. returnSize[i] = tmp;
  17. }
  18. return returnSize;
  19. }
  20. int main()
  21. {
  22. int nums[] = { 1,5,8,9 };
  23. int numsSize = sizeof(nums) / sizeof(nums[0]);
  24. int* tmp = (int*)malloc(numsSize * sizeof(int));
  25. runningSum(nums, numsSize,tmp);
  26. for (int i = 0; i < numsSize; i++)
  27. {
  28. printf("%d ", tmp[i]);
  29. }
  30. free(tmp);
  31. return 0;
  32. }

 但是额外开辟数组会占据额外的空间,因此我们可以直接对原数组上修改,方法如下:

  1. #include<stdio.h>
  2. #include<assert.h>
  3. #include<malloc.h>
  4. int* runningSum(int* nums, int numsSize)
  5. {
  6. assert(nums != NULL);
  7. if (NULL == nums)
  8. {
  9. printf("指针为空");
  10. return NULL;
  11. }
  12. for (int i = 1; i < numsSize; i++)
  13. {
  14. nums[i] = nums[i - 1] + nums[i];
  15. }
  16. return nums;
  17. }
  18. int main()
  19. {
  20. int nums[] = { 1,5,8,9 };
  21. int numsSize = sizeof(nums) / sizeof(nums[0]);
  22. runningSum(nums, numsSize);
  23. for (int i = 0; i < numsSize; i++)
  24. {
  25. printf("%d ", nums[i]);
  26. }
  27. return 0;
  28. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/45188
推荐阅读
相关标签
  

闽ICP备14008679号