【タイトル説明】
整数配列numsとターゲット値targetを指定して、合計が配列内のターゲット値である2つの整数を見つけ、それらの配列インデックスを返します。
各入力は1つの回答にのみ対応すると想定できます。ただし、この配列で同じ要素を再利用することはできません。
例:
数値= [2、7、11、15]、ターゲット= 9
nums [0] + nums [1] = 2 + 7 = 9
なので、[0、1]を返します
【解決案】
ハッシュテーブルを使用して計算することを知っている私は、ヒントを見ていた。本質的に、配列の添え字を直接取得することで、迅速なクエリが実現できることを願っています。
おそらく、残りに従ってnums配列の値を取得し、ハッシュテーブル内のテーブルに対応させ、numsの添え字をハッシュ[i]に格納し、ハッシュ内のこの添え字に対応する番号がnumsに存在することを示します。
次に、target-nums [i]を計算して余りを取り、数値が存在する場合にハッシュテーブルに格納される添え字の位置を計算し、ハッシュテーブルの添え字の値に従ってこの位置にデータがあるかどうかを確認します。データがあれば、ハッシュテーブルの値を読み出します。
問題を解決できる写真...
【コード実装】
1 #define MAX 2000 2 int * twoSum(int * nums 、int numsSize、int target、int * returnSize){ 3 int * ret =(int *)malloc(sizeof(int)* 2 ); 4 int hash [MAX]; 5 memset(ハッシュ、-1、sizeof (ハッシュ)); 6 7 for(int i = 0 ; i <numsSize; i ++ ){ 8 if(hash [(target-nums [i] + MAX)%MAX]!=- 1 ){ 9 ret [ 0 ] = hash [(target-nums [i] + MAX)%MAX]; 10 ret [ 1 ] = i; 11 * returnSize = 2 ; 12 リターンret; 13 } 14 hash [(nums [i] + MAX)%MAX] = i; 15 } 16 空き(ハッシュ); 17 * returnSize = 0 ; 18 リターンret; 19 }
【バグ解析】
Oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooatiously、私はハッシュテーブルに精通していません。
sizeofをMAXに置き換えようとしたときにバグが発生しました。memsetの場合、3番目のパラメーターは[バイト数]であることがわかりました。つまり、MAXは* 4 ...