开始忘记了写break,后面没有考虑到答案到下标不是从0开始到
第一次提交
代码
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的顺序
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;
}
复用参数
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;
}