方法一:逐个比对,暴力破解
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* twoSum(int* nums, int numsSize, int target, int* returnSize){
returnSize = (int *)malloc(numsSize);
int len = numsSize;
int idx[2] = {0};
int i = 0;
int j = 0;
for(i = 0;i<len;i++){
for(j= 0;j<len;j++){
if((i!=j) &&(target == (nums[i]+nums[j]))){
idx[0] = i;
idx[1] = j;
returnSize = idx;
// printf("%d"," %d",len,i);
return returnSize;
}
}
}
printf("no target find");
return returnSize;
}
测试结果的output:
Input:
[2,7,11,15]
9
Output:
]
Expected:
[0,1]
暂时没找到原因。。加个print就overflow了 。。
代码部分可以优化循环,j取值从i+1开始,同时省去了i!=j的判断
注意事项
- c语言动态内存申请 melloc()使用注意,malloc()库函数的返回值是一个指向void类型的指针,因此好的编程风格应该是在将这个返回值赋给其他类型的指针变量前进行显示的强制类型转换。例如: (char *)malloc(1024);
2)warning: control reaches end of non-void function
它的意思是:控制到达非void函数的结尾。就是说你的一些本应带有返回值的函数到达结尾后可能并没有返回任何值。这时候,最好检查一下是否每个控制流都会有返回值。例如在循环中检测到满足条件退出了 ,但要考虑不满足条件循环结束后退出时return