先找第一个加数,因为第二个加数可能会是负数,且题中说了最小为-10,所以判断如果某个数减10之后还大于sum,那么必不可能是第一个加数,看下一个。
找到第一个加数之后,便从其后面开始找第二个,一轮遍历没找到,就把第一个加数换成下一个再重新找。
int* twoSum(int* numbers, int numbersLen, int target, int* returnSize ) {
int* ret = (int*)malloc(sizeof(int)*2); //为数组申请2个整型大小的空间
if(numbersLen == 0) return NULL;
*returnSize=2; //控制返回数组中元素的个数为2
int i,j;
for(i=0;i <numbersLen - 1; i++){
if(numbers[i] - 10 > target)//可能会在后面被减掉10
continue;//跳过本次for,检查下一个元素
for(j = i+1; j<numbersLen; j++)
{ //从某个小于目标值的数的后一个数开始比较
if(numbers[i] + numbers[j] == target){
ret[0]=i+1; //所求第一个加数的下标值
ret[1]=j+1; //所求第二个加数的下标值
return ret; //返回数组首地址
}
}
}
return ret;
}

京公网安备 11010502036488号