LeetCode 167. Two Sum II - Input array is sorted
开始忘记了写break,后面没有考虑到答案到下标不是从0开始到
第一次提交
LeetCode 167. Two Sum II - Input array is sorted
代码

int* twoSum(int* numbers, int numbersSize, int target, int* returnSize) {
    int i = 0;
    int j = numbersSize - 1;
    *returnSize = 2;
    int *ret = (int*)malloc(sizeof(int) * 2);
    while(i < j) {
        int sum = numbers[i] + numbers[j];
        if (sum == target) {
            ret[0] = i + 1;
            ret[1] = j + 1;
            break;
        } else if (sum > target) {
            j--;
        } else {
            i++;
        }
    }
    return ret;
}

这个解法是前后扫描的
内存有点高了
调整了下if的顺序
LeetCode 167. Two Sum II - Input array is sorted

int* twoSum(int* numbers, int numbersSize, int target, int* returnSize) {
    int i = 0;
    int j = numbersSize - 1;
    *returnSize = 2;
    int *ret = (int*)malloc(sizeof(int) * 2);
    while(1) {
        int sum = numbers[i] + numbers[j];
        if (sum > target) {
            j--;
        } else if (sum < target) {
            i++;
        } else {
            ret[0] = i + 1;
            ret[1] = j + 1;
            break;
        }
    }
    return ret;
}

复用参数
LeetCode 167. Two Sum II - Input array is sorted

int* twoSum(int* numbers, int numbersSize, int target, int* returnSize) {
    int i = 0;
    int j = numbersSize - 1;
    while(1) {
        int sum = numbers[i] + numbers[j];
        if (sum > target) {
            j--;
        } else if (sum < target) {
            i++;
        } else {
            *returnSize = 2;
            numbers[0] = i + 1;
            numbers[1] = j + 1;
            return numbers;
        }
    }
    return NULL;
}

相关文章: