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