1、两数之和
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
第一种算法就是两个遍历,找到和为定值的两个数:
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* twoSum(int* nums, int numsSize, int target) {
int i,j;
int *a=(int*)malloc(2*sizeof(int));
for(i=0;i<numsSize;i++)
{
for(j=i+1;j<numsSize;j++)
{
if(target==nums[i]+nums[j])
{
a[0]=i;a[1]=j;
}
}
}
return a;
}
中间遇到了一个错误,一直不能运行,
错误显示 load of null pointer of type 'const int' 查阅了他人的代码,发现是数组a定义错了 不能直接 int a[];题目要求的是指针数组,而这里指针数组a定义方式为
int *a=(int*)malloc(2*sizeof(int));
为该指针动态分配一个一块2个int空间的内存。
此时时间复杂度为O(n2).空间复杂度为O(1).