力扣-两数之和

17 阅读1分钟

求两数之和:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。

int* twoSum(int* nums, int numsSize, int target, int* returnSize) {

    for (int i = 0; i < numsSize; i++) {
        for (int j = i + 1; j < numsSize; j++) {
            if (nums[i] + nums[j] == target) {
                int* ans = malloc(2 * sizeof(int));
                *returnSize = 2;
                ans[0] = i;
                ans[1] = j;
                return ans;
            }
        }
    }
    *returnSize = 0;  // 没有找到
    return NULL;
}

}

思路:通过双重循环遍历所有不重复的元素对组合。外层循环依次选取第一个数,内层循环从第一个数的右侧开始选取第二个数,避免重复比较。当发现两数之和等于目标值时,立即动态分配内存存储这两个下标,并设置返回数组大小为2后返回。如果遍历完所有组合仍未找到,则设置返回数组大小为0并返回空指针。这种方法思路直观,但时间复杂度为O(n²),适合小规模数据。

这次作答虽然代码简洁直观,但是过于依赖基础解法,忽略了性能优化,仅仅能通过问题,但没有考虑代码的局限性。