题解 | #两数之和#

两数之和

https://www.nowcoder.com/practice/20ef0972485e41019e39543e8e895b7f

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


全部评论

相关推荐

点赞 评论 收藏
分享
我只是一个小白菜:我还用不惯m4,也是山猪吃不了细糠了
投递字节跳动等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务