C语言实现LeetCode两数之和问题,通过动态内存分配返回索引数组
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;
}
代码解释:
-
twoSum函数:- 接受四个参数:
nums: 输入的整数数组numsSize: 数组的大小target: 目标值returnSize: 返回数组的大小
- 使用嵌套循环遍历数组中的所有数字对。
- 如果找到两个数字的和等于目标值,则使用
malloc函数动态分配一个大小为 2 的整数数组,并将这两个数字的索引存储到数组中。 - 将
returnSize设置为 2,并返回新创建的数组。 - 如果没有找到符合条件的数字对,则将
returnSize设置为 0,并返回NULL。
- 接受四个参数:
-
main函数:- 定义一个示例数组
nums、目标值target和一个用于存储返回数组大小的变量returnSize。 - 调用
twoSum函数,并将结果存储在result指针中。 - 如果
returnSize大于 0,则遍历result数组并打印找到的索引。 - 最后,使用
free函数释放动态分配的内存。
- 定义一个示例数组
通过使用动态内存分配,我们能够创建一个大小合适的数组来存储找到的索引,并将其返回给调用函数。这解决了之前代码示例中存在的问题,并确保代码能够通过 LeetCode 的审查。
原文地址: https://www.cveoy.top/t/topic/bhbV 著作权归作者所有。请勿转载和采集!