提问人:rachelle 提问时间:6/27/2023 最后编辑:Gerhardhrachelle 更新时间:6/27/2023 访问量:214
在 Leetcode 的“两和”问题中,为什么我们必须 *returnSize=2;用 C 语言?
In the "Two Sum" question in Leetcode, why do we have to *returnSize=2; in C language?
问:
示例 1:
Input: nums = [2,7,11,15], target = 9 <br>
Output: [0,1] <br>
解释:因为 nums[0] + nums[1] == 9,我们返回 [0, 1]。
示例 2:
Input: nums = [3,2,4], target = 6 <br>
Output: [1,2] <br>
示例 3:
Input: nums = [3,3], target = 6 <br>
Output: [0,1] <br>
约束:
2 <= nums.length <= 104
-109 <= nums[i] <= 109
-109 <= target <= 109
Only one valid answer exists.
这是我设法从解决方案和 youtube 获得的代码:
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* twoSum(int* nums, int numsSize, int target, int* returnSize) {
//uptil here, it is given
int *returnArr=malloc(2 * sizeof(int));
*returnSize=2; //WHY
int i,j;
for(i=0;i<numsSize-1;i++){
for(j=i+1;j<numsSize;j++){
if(nums[i]+nums[j]==target){
returnArr[0]=i;
returnArr[1]=j;
return returnArr; //gets out of loop if we encounter return so program is faster if return is here too;
}
}
}
return returnArr; //here return returnArr is mandatory;
}
所以 stackoverflow 告诉我我应该在这里包含非代码文本,它不允许我在没有它的情况下发布,而且我花了很多时间缩进代码,所以是的,这是有效的解决方案代码并提供正确的输出,但我只想知道为什么我们必须放置以及为什么我们不能像 - 为什么 leetcode 暗示它应该被错位?*returnSize=2;
returnArr
int returnArr[100];
我可以不声明函数中的元素吗?这些元素可以不发送到 main 函数吗?但是在这里,它只是返回数组的值,而不是数组本身? 但即便如此,我们不能返回数组吗?
P.S. 我是一个已经学习(未掌握)DSA 的初学者,我花了很多时间试图理解,但觉得我在浪费时间:(
答:
为什么我们必须 *returnSize=2;用 C 语言?
您必须返回数组中的元素数,因为调用方需要它。*returnSize
(a) Leetcode 没有在问题页面上说明此要求,这是 Leetcode 的质量问题。
(b) 这一要求没有理论上的理由;由于此问题中的返回大小固定为两个元素,因此显式返回它不会获得任何信息。返回大小可能符合 Leetcode 中的常见模式,该模式用于解决返回大小不固定的其他问题。
为什么我们不能像 int returnArr[100] 一样声明一个数组 returnArr;- 为什么 LeetCode 暗示它应该被恶意定位?我可以不声明函数中的元素吗?
在函数内部声明时,声明的对象具有自动存储持续时间。这意味着从与声明关联的程序执行到包含声明的代码块的执行结束,都会为其保留内存。该执行将在函数返回时或更早结束。然后,内存不再保留给对象,并且可以将其重新用于其他目的。因此,此函数的调用方不能依赖于可用的内存。实际上,在函数中声明时,不能将其返回到调用函数。int returnArr[100];
int returnArr[100];
这些元素可以不发送到 main 函数吗?
不,不可靠。
但是在这里,它只是返回数组的值,而不是数组本身?
该语句不返回数组。当数组在 C 表达式中使用,而不是用作 的操作数,而不是作为 的操作数,或者用作用于初始化数组的字符串文字时,它会自动转换为指向其第一个元素的指针。其实也是.它返回指向用于 的内存的指针。但是,如上所述,此内存不会保留给函数返回后,因此指针将失效。return returnArr;
sizeof
&
return returnArr;
return &returnArr[0];
returnArr
returnArr
但即便如此,我们不能返回数组吗?
不。
评论