C语言实现LeetCode两数之和问题,通过动态内存分配返回索引数组

在LeetCode上,'两数之和'是一个经典的算法问题。要求在一个给定的整数数组中找到两个数字,使其和等于一个特定的目标值,并返回这两个数字的索引。

之前的代码示例存在一些问题,无法通过LeetCode的审查,因为它没有正确返回索引数组。为了解决这个问题,我们需要使用动态内存分配来创建一个数组,用于存储找到的索引,并将其返回。

以下是修正后的C语言代码:

#include<stdio.h>
#include<stdlib.h>

int* twoSum(int* nums, int numsSize, int target, int* returnSize){
    for (int i = 0; i < numsSize; i++) {
        for (int j = i + 1; j < numsSize; j++) {
            if (nums[i] + nums[j] == target) {
                *returnSize = 2;
                int* result = (int*)malloc(*returnSize * sizeof(int));
                result[0] = i;
                result[1] = j;
                return result;
            }
        }
    }
    *returnSize = 0;
    return NULL;
}

int main() {
    int nums[4] = { 2,7,11,15 };
    int target = 9;
    int returnSize;
    int* result = twoSum(nums, 4, target, &returnSize);
    for(int i = 0; i < returnSize; i++) {
        printf('%d ', result[i]);
    }
    free(result);
    return 0;
}

代码解释:

  1. twoSum 函数:

    • 接受四个参数:
      • nums: 输入的整数数组
      • numsSize: 数组的大小
      • target: 目标值
      • returnSize: 返回数组的大小
    • 使用嵌套循环遍历数组中的所有数字对。
    • 如果找到两个数字的和等于目标值,则使用 malloc 函数动态分配一个大小为 2 的整数数组,并将这两个数字的索引存储到数组中。
    • returnSize 设置为 2,并返回新创建的数组。
    • 如果没有找到符合条件的数字对,则将 returnSize 设置为 0,并返回 NULL
  2. main 函数:

    • 定义一个示例数组 nums、目标值 target 和一个用于存储返回数组大小的变量 returnSize
    • 调用 twoSum 函数,并将结果存储在 result 指针中。
    • 如果 returnSize 大于 0,则遍历 result 数组并打印找到的索引。
    • 最后,使用 free 函数释放动态分配的内存。

通过使用动态内存分配,我们能够创建一个大小合适的数组来存储找到的索引,并将其返回给调用函数。这解决了之前代码示例中存在的问题,并确保代码能够通过 LeetCode 的审查。

C语言实现LeetCode两数之和问题,通过动态内存分配返回索引数组

原文地址: https://www.cveoy.top/t/topic/bhbV 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录