第一次做leetcode。。。 原来这个*Note: The returned array must be malloced, assume caller calls free().* 的意思是返回动态数组来表示输出结果,而且不需要在函数内free。
原来c是可以通过返回对应函数类型指针的方式返回数组的诶୧(๑•̀◡•́๑)૭具体方式大概是:
int* example(int n){//传入数组大小
int *arr;
if(n<=0) return ERROR;//#defien ERROR -1
arr=(int*)malloc(sizeof(int)*n);//分配内存
return arr;//返回得到的整型数组的指针
}
我的题解:暴力解法
int* twoSum(int* nums, int numsSize, int target, int* returnSize){
int *res,i,j;
res=(int*)malloc(sizeof(int)*2);
*returnSize=0;
for(i=0;i<numsSize-1;i++){
for(j=i+1;j<numsSize;j++){
if(nums[i]+nums[j]==target){
res[0]=i;
res[1]=j;
*returnSize=2;
return res;
}
}
}
return 0;//未找到满足条件的两个数
}//时间复杂度O(n^2) 执行用时 : 260 ms
无关紧要的main函数:
int main(void){
int num[4]={2,7,11,13},*e,tar,size;
int i;
scanf("%d",&tar);
e=twoSum(num,4,tar,&size);
printf("[");
for(i=0;i<size;i++)
printf("%d,",e[i]);
printf("\b]");//通过\b退格以后再输出,用]覆盖最后输出的一个逗号
return 0;
}
为了达到与题目相同的输出效果,使用了一个退格符“\b”,蛮有意思的。注意这个符号只是向前移动光标,需要再输入内容来达到删除的目的
吐槽:不同于大部分oj的解题方式,leetcode只需要给出函数就可以呢。。。看题解还有更简单的方法(哈希表)。去补