求助|1. 两数之和 第一题!C语言求教!
963
2024.03.12
2024.03.12
发布于 未知归属地

简介

刷题第一题给我整不会了,C这么难吗?用的枚举方式写的,工作一直用Java,毕业后就没接触过C,全忘了。C的代码迟迟无法通过,Java一次就过了。

经过一番摸索内存管理后,完整代码(C的还是不显示正确,最后看了官方答案才解决,但是不知道原理)如下:

C

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* twoSum(int* nums, int numsSize, int target, int* returnSize) {
    returnSize = (int*)malloc(2 * sizeof(int));
    for(int i = 0; i < numsSize; i++){
        int ni = nums[i];
        for(int j = i+1; j < numsSize; j++){
            int nj = nums[j];
            if (ni + nj == target) {
                printf("%d-%d",i,j);
                returnSize[0] = i;
                returnSize[1] = j;
                return returnSize;
            }
        }
    }
    // If no solution is found, free the memory and return NULL
    free(returnSize);
    return NULL;
}

让我想不通的是,printf("%d-%d",i,j); 这里已经输出正确答案了,最终显示的输出 returnSize 依然是空数组 [] !

下面参照官方的正确答案改的,求助C的大佬解答一下原理是什么?returnSize 和自定义的 result怎么关联起来的?

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* twoSum(int* nums, int numsSize, int target, int* returnSize) {
    int* result = (int*)malloc(2 * sizeof(int));
    for(int i = 0; i < numsSize; i++){
        int ni = nums[i];
        for(int j = i+1; j < numsSize; j++){
            int nj = nums[j];
            if (ni + nj == target) {
                printf("%d-%d",i,j);
                result[0] = i;
                result[1] = j;
                *returnSize = 2;
                return result;
            }
        }
    }
    *returnSize = 0;
    return NULL;
}

Java

class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] returnSize = new int[2];
        for(int i = 0; i < nums.length; i++){
            int ni = nums[i];
            for(int j = i+1; j < nums.length; j++){
                int nj = nums[j];
                if (ni + nj == target) {
                    
                    returnSize[0] = i;
                    returnSize[1] = j;
                    break;
                }
            }
        }
        return returnSize;
    }
}
评论 (4)