题解 | #两数之和#

两数之和

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

两遍for循环进行判断,如果和目标数相同直接return,如果出了for循环还找不到就return 0(题目已经写明了是肯定找得到的)

  • 需要注意的是,这里必须要加一个continue语句,当第一个数已经大于我们的目标数的时候,不再执行后面的第二个for循环,这样能大大减少判断次数。如果不这么写,会超时
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param numbers int整型一维数组 
 * @param numbersLen int numbers数组长度
 * @param target int整型 
 * @return int整型一维数组
 * @return int* returnSize 返回数组行数
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
int* twoSum(int* numbers, int numbersLen, int target, int* returnSize) {
    int* ptr = (int*)calloc(2, sizeof(int));
    for (int i = 0; i < numbersLen; i++)// write code here
    {
        if (numbers[i] > target)
            continue;
        for (int j = i + 1; j < numbersLen; j++)
        {
            int sum = numbers[i] + numbers[j];
            if (sum == target)
            {
                ptr[0] = i + 1;
                ptr[1] = j + 1;
                *returnSize = 2;
                return ptr;
            }
        }
    }
    *returnSize = 0;
    return 0;
}

alt

全部评论
6666666666,差一个条件就不超时了~
1 回复 分享
发布于 2022-02-17 17:48
虽然能通过但是有问题呀,若是一个大于target的数加上一个负数刚好等于target呢
5 回复 分享
发布于 2022-08-02 15:36
[3,2,-1]2 如何应对?
1 回复 分享
发布于 2024-02-23 14:30 山东

相关推荐

点赞 评论 收藏
分享
10-20 11:11
辽宁大学 营销
点赞 评论 收藏
分享
评论
6
2
分享

创作者周榜

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