给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* twoSum(int* nums, int numsSize, int target) {
int i,j;
int *returnArray = (int*)malloc(2*sizeof(int));
returnArray[0] = -1; //找不到的话返回 [-1 -1]
returnArray[1] = -1;
for(i = 0;i<numsSize;i++)
for(j=i+1;j<numsSize;j++)
if(target ==nums[i]+nums[j])
{
returnArray[0] = i;
returnArray[1] = j;
printf("%d %d\n", returnArray[0], returnArray[1]);
return returnArray;
}
return returnArray;
}
/*如果要找返回的数字【2,7】 而不是 位置【0,1】,可以先排序后找数字
int cmp(const void*a,const void *b)
{
return *(int*)a > *(int*)b;
}
int* twoSum(int* nums, int numsSize, int target) {
int i,j;
int a,b;
int *returnArray = (int*)malloc(2*sizeof(int));
returnArray[0] = -1; //找不到的话返回 [-1 -1]
returnArray[1] = -1;
qsort(nums,numsSize,sizeof(int),cmp);
for(i = 0;i<numsSize;i++)
{
a = nums[i];
b = target - a;
for(j=i+1;j<numsSize;j++)
{
if(b == nums[j])
{
returnArray[0] = i;
returnArray[1] = j;
printf("%d %d\n", returnArray[0], returnArray[1]);
return returnArray;
}
if(nums[j] > b) //减少第2个环的计算次数
break;
}
}
return returnArray;
}
*/
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
//#include <string.h>
int* twoSum(int* nums, int numsSize, int target) {
int i = 0;
int j = 0;
int *p = (int *)malloc(sizeof(int)*2);
memset(p,0,sizeof(int)*2);
/* 计算int*类型指针的长度 */
//strlen只能用于char*类型指针 //sizeof(指针) 结果永远是4
//numsSize = strlen(nums);
/*
int *p2 = nums;
numsSize = 0;
while(*p2++)
numsSize ++;
*/
for(i = 0; i<numsSize; i++)
{
for(j = i+1; j<numsSize; j++)
if(nums[i]+nums[j]==target)
{
/* 输出2+7=9
*p = nums[i];
*(p+1) = nums[j];
printf("%d+%d=%d\n",*p,*(p+1),target);
*/
/* 输出序号[1,2] 指针*/
*p = i;
*(p+1) = j;
return p ;
}
}
return NULL;
}