流心
发布于 2024-05-22 / 1 阅读
0

两数之和

给定一个整数数组 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,两者均从 0numsSize - 1

  • 判断条件:在内层循环中,检查 nums 数组中索引 i 和索引 j 的两个元素之和是否等于 target

  • 分配内存和返回结果:

    • 如果找到符合条件的数对,使用 malloc 动态分配一个能存放两个整数的内存块,并将其地址存储在指针 ret 中。

    • *returnSize = 2;returnSize 指向的值设置为 2,表示将返回两个数。

    • 返回 ret 指针,指向分配的内存区域,但此处没有将找到的数存储到 ret 中。