- 二つの数:整数配列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