【LeetCode】1.两数之和

 
 

1. 两数之和

给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。

你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。

示例:

给定 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;
}




猜你喜欢

转载自blog.csdn.net/qq1518572311/article/details/80290002