给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。
int* twoSum(int* nums, int numsSize, int target, int* returnSize) {
// 循环遍历数组中的所有可能的数对。外层循环的索引为 i
for(int i = 0;i < numsSize;++i){
// 循环遍历数组中的所有可能的数对。外层循环的索引为 j
for(int j = i + 1;j < numsSize;++j){
//nums 数组中索引 i 和索引 j 的两个元素之和是否等于 target
if(nums[i] + nums[j] == target){
// 分配内存和返回结果
int* ret = malloc(sizeof(int) *2);
ret[0] = i; // 返回索引而不是值
ret[1] = j; // 返回索引而不是值
*returnSize = 2;
return ret;
}
}
}
return NULL;
}参数:
int* nums:指向整数数组的指针,表示输入的数字。int numsSize:整数,表示数组nums的大小。int target:目标值,表示我们要寻找的两个数的和。int* returnSize:指向整数的指针,用于存储返回结果的大小。
返回值:函数返回一个指向整数的指针,这个指针指向一个包含找到的两个数的数组。
主循环:两个嵌套的
for循环遍历数组中的所有可能的数对。外层循环的索引为i,内层循环的索引为j,两者均从0到numsSize - 1。判断条件:在内层循环中,检查
nums数组中索引i和索引j的两个元素之和是否等于target。分配内存和返回结果:
如果找到符合条件的数对,使用
malloc动态分配一个能存放两个整数的内存块,并将其地址存储在指针ret中。*returnSize = 2;将returnSize指向的值设置为2,表示将返回两个数。返回
ret指针,指向分配的内存区域,但此处没有将找到的数存储到ret中。