• leetcode1480.一维数组的动态和



    前言

    从零开始leetcode刷题,1480.一维数组的动态和

    一、错误代码

    错误代码1:自带注释,要让我给返回的数组分配空间,调用的函数叫做free()
    一开始昏了头,以为要给returnSize分配空间,然后让他带着返回去,真的就是白痴操作。
    当时我就想,传过来的是一个指针,既然已经传过来了,说明这个指针是有值的,也就是说指向了一片空间,到了这个函数里,自然不需要再给这个指针分配一片空间,returnSize是一个指向int类型的变量,可以改变他所指向的那个值。
    数组的动态和的长度,应该和原来的数组是一样的,所以只需要将远离啊的numsSize赋值给returnSize所指向的int值,即可。
    因为传过来的是一个指针,更改了指针所指向的变量的量,函数结束之后,值也是改变之后的量。

    整个函数的返回值,应该是一个数组,这个数组应该额外申请空间,或者在当前的数组上操作完成。

    /**
     * Note: The returned array must be malloced, assume caller calls free().
     */
    int* runningSum(int* nums, int numsSize, int* returnSize){
        int i,x;
        returnSize = (int *)malloc(sizeof(int)*numsSize);
       for(i=1; i<=numsSize; i++){
           int sum=0;
           for(x=1; x<=i; x++){
               sum += nums[x-1];
           }
           *(returnSize+i-1) = sum;
       }
       return returnSize;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    错误代码2: 因为在测试的时候一直出现一种情况,就是返回的时候只有一个】,最后搜索了一下,得知,是因为我的返回的数组长度没有设置,遍历的时候没有长度,所以只输出了一个】

    /**
     * Note: The returned array must be malloced, assume caller calls free().
     */
    int* runningSum(int* nums, int numsSize, int* returnSize){
        int i;
        // *returnSize = numsSize;
        for(i=1; i<numsSize; i++){
            nums[i] += nums[i-1];
        }
        return nums;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    二、正确代码

    代码如下(示例):
    因为是刚开始刷的第一题,给自己提个醒,两个地方需要注意,一个是返回的数组的长度一定要赋值,没有这个值在输出的时候就输出不了。
    一个是自己定义的数组,要给其分配内存空间。

    /**
     * Note: The returned array must be malloced, assume caller calls free().
     */
    int* runningSum(int* nums, int numsSize, int* returnSize){
        int i,x;
        *returnSize = numsSize;
        int *ans = (int *)malloc(sizeof(int)*numsSize);
        for(i=1; i<=numsSize; i++){
            int sum = 0;
            for(x=1; x<=i; x++){
                sum += nums[x-1];
            }
            ans[i-1] = sum;
        }
        return ans;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    正确代码2:
    算法原地工作,不需要申请额外的内存空间

    /**
     * Note: The returned array must be malloced, assume caller calls free().
     */
    int* runningSum(int* nums, int numsSize, int* returnSize){
        int i;
        *returnSize = numsSize;
        for(i=1; i<numsSize; i++){
            nums[i] += nums[i-1];
        }
        return nums;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    总结

  • 相关阅读:
    java培训技术自定义类型转换器示例
    105-120-Hadoop-MapReduce-outputformat:
    git 使用
    14 张图搞懂 Nginx 高性能网络工作原理!
    分享Keil5设置忽略编译过程中的警告
    测试H5需要注意的交互测试用例点
    自定义类型:结构体
    肖sir__项目实战讲解__004
    LARGE LANGUAGE MODELS AS OPTIMIZERS
    马斯克强制员工每周到岗40个小时:“要不是我当初睡工厂,特斯拉早破产了。”
  • 原文地址:https://blog.csdn.net/Jinx_vt_Lin/article/details/125472829