题解 | #两数之和#
两数之和
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;
}