先找第一个加数,因为第二个加数可能会是负数,且题中说了最小为-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; }