#LeetCode上的两数之和问题
##自己作答的情况如下
//
#define MaxSize 2048
int* twoSum(int* nums, int numsSize, int target, int* returnSize){
int i=0;
int hashlist[MaxSize];
int * sum = (int *) malloc (sizeof(int) * 2);//自行释放,否则一直存在,intsum[2];函数结束,系统自动回收
memset(hashlist,-1,sizeof(hashlist));
for(i=0;i<numsSize;i++)
{
if(hashlist[(target - nums[i] + MaxSize) % MaxSize] != -1 )
{
sum[0] = hashlist[(target - nums[i] + MaxSize) % MaxSize];
sum[1] = i;
*returnSize = 2;
return sum;
}
hashlist[(nums[i] + MaxSize) % MaxSize] = i;
}
*returnSize = 0;
return sum;
}
侵删
##自己写的代码实在垃圾,就不贴出来了
###下面是是自己踩的坑,自己作为记录写下来
-
开始使用的是数组类型,因为由系统自动销毁,所有报错,而malloc分配的空间在堆栈内,可以顺利返回
-
memset函数用于初始化数组
-
开始没有考虑数据为负数
-
开始自己想着先把hash表初始化然后再去判断 target-*nums
- 然后如果被后面的值重复覆盖了的话就会丢失信息,而且无法查出3+3=6的这种组合
-
一个礼拜以后回来再看看这个题目