题目来源

LeetCode:https://leetcode-cn.com/problems/two-sum

我的程序

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* twoSum(int* nums, int numsSize, int target, int* returnSize){
    int* ret = NULL;
    *returnSize = 0;
    int temp = 0;
    for(int i = 0; i < numsSize; ++i)
    {
        for(int j = i + 1; j < numsSize; ++j)
        {
            if(nums[i] + nums[j] == target)
            {
                *returnSize += 2;
                ret = realloc(ret, sizeof(int) * (*returnSize));
                ret[temp++] = i;
                ret[temp++] = j;
            }
        }
    }
    return ret;
}

结果

执行用时内存消耗
152ms6.1MB

官方答案

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* ret = malloc(sizeof(int) * 2);
                ret[0] = i, ret[1] = j;
                *returnSize = 2;
                return ret;
            }
        }
    }
    *returnSize = 0;
    return NULL;
}

结果

执行用时内存消耗
92ms6.3MB

分析

我的程序是整个完全遍历完了找出所有解,而官方是找到后直接跳出。相对于这道题来说官方的答案很显然更加贴近题意,但是我的程序更加具有普遍性(因为适合满足多组解的情况)。