leetcode_1。二つの数字

  • 二つの数:整数配列NUMSと目標値ターゲット与えられ、配列内の2つの整数の目標値を識別するように依頼し、その配列の添字に戻ります。あなたは、各入力が一つだけ答えに対応することを想定することができます。ただし、同じ配列要素を再使用することはできません。
    -示例:给定 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* returnSize){
    int i=0,j=0;
    int tag=0;
    int* a=NULL;
    a=(int*)malloc(sizeof(int)*2);
    for(i=0;i<numsSize-1;i++)
    {
        if(tag==1) break;
        for(j=1+i;j<numsSize;j++)
        {
            if((nums[i]+nums[j])==target)
            {
                *a=i;
                *(a+1)=j;
                tag=1;
                *returnSize=2;
                break;
            }
        }
    }
    return a;
}
  • leetcode上初めての質問では、唯一面倒なことは、あなたがそれがパラメータはint * returnSize元転送の意味を通るので、私は問題が理解されていないいくつかの回を書いた、それはあなたのパラメータを与える意味知っておく必要があるということです場合にのみ、かつ、唯一の答えが存在する場合、この引数は、指定されたメモリサイズを来て、私たちを必要とし、上記回答の質問に従ったものです。
  • さらに、時間複雑性はO(n²)、ハッシュテーブルの時間複雑さを軽減するために、検索速度を加速するために使用が、時間のためのより多くの空間、すなわち空間を消費することができるされています。一時的に少し、補足します。
  • 解の数については、malloc関数reallocのように変化するユーザーの答えの導入、メモリ、複数のストレージ・ソリューションを拡大し続けています。
int* twoSum(int* nums, int numsSize, int target, int* returnSize){
    int i, j;
    int num = 0, num2;
    int * arrayReturn = NULL;
    for(i=0; i<numsSize-1; i++) {
        for(j=i+1; j<numsSize; j++) {
            if(nums[i]+nums[j] == target) {
                arrayReturn = (int *) realloc(arrayReturn, sizeof(int)*(2+num));
                num2 = 2*num;
                arrayReturn[num2] = i; 
                arrayReturn[num2+1] = j;
                *returnSize = num2+2;
                num++;
            }   
        }
    }
    return arrayReturn;
}

ここでのmalloc、reallocの差、のcalloc、およびブログを再現:https://www.cnblogs.com/lidabo/p/4611411.html

公開された77元の記事 ウォン称賛19 ビュー10000 +

おすすめ

転載: blog.csdn.net/qq_42932834/article/details/94847761