给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
代码
先把代码贴上,这是最笨的一个方法,这也是我刚看见这个问题的时候首先想到的解决方法但是,在我做这道题目的时候总是提交失败,前面有错误:SerializerHelper.inl:10:10: runtime error: load of null pointer of type ‘const int’
这个错误我一直没有办法解决但是在题目的评论中我看到了其他人也用C语言解决这个问题,看到了陶小丸子这位网友的解决代码,实现方法是和我一样的,但是有一个地方是有差别的。
对于这样的错误提示:load of null pointer of type 'const int’的处理方法:
在调用函数时,如果返回值如果是一个常量则没问题。如果返回值若为指针则可能会出现该错误,假如返回的指针地址指向函数内的局部变量,在函数退出时,该变量的存储空间会被销毁,此时去访问该地址就会出现这个错误。
解决办法有以下三种:
1.返回的指针使用malloc分配空间
2.将该变量使用static修饰 static修饰的内部变量作用域不变 但是声明周期延长到程序结束 即该变量在函数退出后仍然存在
3.使用全局变量
我原来写出来的代码是这个样子的
int a[2]={0};
她写的是这样的
static int a[2]={0};
C语言中的static
这样子,我就在网上查找了有关static的资料,感觉C语言中的static 详细分析这篇文章写讲解的很详细我就不细说了。感兴趣的可以去原文看。
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* twoSum(int* nums, int numsSize, int target)
{
static int a[2] = {0};
for(int i = 0; i < numsSize-1; i++)
{
for(int j = i+1; j < numsSize; j++)
{
a[0]=i;
a[1]=j;
return a;
}
}
return 0;
}
这个算法题有好多种方式,大家有好的算法一起讨论。