我正在尝试解决这个问题:
给定一个整数数组 nums 和一个整数目标,返回两个数字的索引,使它们相加等于目标。
您可以假设每个输入都有一个解决方案,并且 您不能两次使用相同的元素。
您可以按任何顺序返回答案。
Example 1:
Input: nums = [2,7,11,15], target = 9 Output: [0,1] Output: Because
nums[0] + nums[1] == 9, we return [0, 1].
我的代码是:
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* twoSum(int* nums, int numsSize, int target, int* returnSize){
*returnSize = malloc (2 / sizeof(int));
for (int i=0; i<numsSize; i++)
{
for (int j=0; j< numsSize; j++)
{
if (i != j)
{
if(nums[i] + nums[j] == target)
{
returnSize[0] = i;
returnSize[1] = j;
}
}
}
}
return returnSize;
}
如您所见,他们在代码开头添加了注释以给出提示,但我不知道应该如何在此处使用 malloc() 函数以及确切的原因。 正如你所看到的,我尝试用 malloc() 函数添加第一行,只是根据我在网上阅读的内容,我认为这会有所帮助,因为我认为它为数组分配了 2 个可用空间,这意味着我将有足够的内存和空间来在其中插入 2 个整数。 但没有成功。
我很高兴听到我应该如何以及出于什么原因在这里使用 malloc 函数, 谢谢。
不允许在函数体顶部声明与参数同名的局部变量。你应该给另一个名字。
分配大小也是错误的。大小应该是(元素数量)乘以(一个元素的大小)。
最后我猜想返回的数组中有效元素的数量应该写入
returnSize
所指向的内容。
试试这个:
int* twoSum(int* nums, int numsSize, int target, int* returnSize){
int *returnArray = malloc (2 * sizeof(int));
for (int i=0; i<numsSize; i++)
{
for (int j=0; j< numsSize; j++)
{
if (i != j)
{
if(nums[i] + nums[j] == target)
{
returnArray[0] = i;
returnArray[1] = j;
}
}
}
}
*returnSize = 2;
return returnArray;
}
使用 malloc、calloc 或 realloc 函数动态分配数组,数组的大小不存储在内存中的任何位置。因此,没有直接的方法可以找到动态分配数组的大小。要管理动态分配数组的大小,我们必须单独跟踪大小。