这题我用了比较暴力的方法,直接遍历
1 int* twoSum(int* nums, int numsSize, int target) { 2 int *indices; 3 indices = (int*)malloc(2*sizeof(int)); 4 int sum=0; 5 for(int i=0;i<numsSize-1;i++) 6 { 7 indices[0]=i; 8 for(int j=i+1;j<numsSize;j++) 9 { 10 sum = *(nums+i) + *(nums+j); 11 if(sum == target) 12 { 13 indices[1] = j; 14 break; 15 } 16 } 17 if(sum == target) 18 break; 19 } 20 21 return indices; 22 }
但是一开始遇到一点小问题,下面是错误的做法。我直接定义一个数组,然后返回,这是一个基本的错误,因为这个函数里面的数组的空间是分配在栈上,在函数结束后就释放了。
如果是定义一个指针,然后用malloc分配的空间是建立在堆上,函数结束后并没有消失,所以是正常运行的。另外一种做法就是,定义一个全局的数组也是可以的。
1 int* twoSum(int* nums, int numsSize, int target) { 2 int indices[2]; //这里直接定义一个数组 3 int sum=0; 4 for(int i=0;i<numsSize-1;i++) 5 { 6 indices[0]=i; 7 for(int j=i+1;j<numsSize;j++) 8 { 9 sum = *(nums+i) + *(nums+j); 10 if(sum == target) 11 { 12 indices[1] = j; 13 break; 14 } 15 } 16 if(sum == target) 17 break; 18 } 19 20 return indices; 21 }