欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > 力扣C语言刷题记录(一)两数之和

力扣C语言刷题记录(一)两数之和

2024/12/22 17:05:27 来源:https://blog.csdn.net/qq_51519091/article/details/140999912  浏览:    关键词:力扣C语言刷题记录(一)两数之和

题目

暴力遍历

int* twoSum(int* nums, int numsSize, int target, int* returnSize) {  // 创建一个数组来存储结果索引  int* indices = (int*)malloc(2 * sizeof(int));  if (indices == NULL) {  // 如果内存分配失败,返回 NULL  *returnSize = 0;  return NULL;  }  for (int i = 0; i < numsSize; i++) {  for (int j = i + 1; j < numsSize; j++) { // 从 i+1 开始,避免重复和自身相加  if (nums[i] + nums[j] == target) {  indices[0] = i;  indices[1] = j;  *returnSize = 2; // 设置返回数组的大小  return indices; // 返回索引数组  }  }  }  // 如果没有找到解,释放已分配的内存并返回 NULL  free(indices);  *returnSize = 0;  return NULL;  
}

Q1

在创建数组并对数组进行初始化时使用的是显式初始化

int indices[2] ={0};  

但是当函数返回时,局部数组的生命周期结束,其内存将被释放或重用。这意味着返回的指针将指向不确定的内存,也就是我们常说的野指针。因此无法正常返回数据。

A1

修改为使用动态内存分配来创建一个数组,使得该数组在函数外部也是有效的。从而可以返回

int* indices = (int*)malloc(2 * sizeof(int));  

Q2

在对第二个符合条件的数时进行遍历,可能会重复与自身相加。

for (int j = 0; j < numsSize; j++)   

这里需要更改为

// 从 i+1 开始,避免重复和自身相加
for (int j = i + 1; j < numsSize; j++)   

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com