a+b II
描述:🤔
错误代码
c语言代码⬇️
错误原因:
通过代码
通过代码1⬇️
就暴力遍历,不够妙,值的注意的地方
1.在找到两个下标后应立即返回,否则会超时
2.既如此那是不是只在if里面有一个return就行了呢,并不是,函数必须有返回值,所以最后还需要一个return。
3.returnSize要给出,不然堆栈溢出
4.题目多少沾点毛病,说的下标从1开始,但实际操作会显示堆栈溢出,谁出的题?我直接梆梆两拳👊👊
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* twoSum(int* numbers, int numbersSize, int target, int* returnSize){
int* ret;
ret = (int *)malloc(sizeof(int)*2);
*returnSize = 2;
for(int i = 0;i < numbersSize; i++){
for(int j = i+1; j < numbersSize; j++){
if(numbers[i] + numbers[j] == target){
ret[0] = i+1;
ret[1] = j+1;
return ret;
}
}
}
return ret;
}
通过代码2⬇️
双指针,从原来的1000ms到12ms效率大大提高
到底谁翻译的题?浪费爷时间,吃我一记强手裂颅?👴👐👴
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* twoSum(int* numbers, int numbersSize, int target, int* returnSize){
int i = 0;
int j = numbersSize - 1;
int *ret = (int *)malloc(sizeof(int)*2);
*returnSize = 2;
for(; i < j;){
int sum = numbers[i] + numbers[j];
if(sum == target){
ret[0] = i+1;
ret[1] = j+1;
return ret;
}
if(sum > target){
j--;
}else{
i++;
}
}
return ret;
}
总结
总结:🈚️