Leetcode 1. 2つの数値の合計は100%C言語で実装されています

【タイトル説明】

整数配列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 *)mallocsizeofint)* 2 );
4      int hash [MAX];
5      memset(ハッシュ、-1sizeof (ハッシュ));
6  
7      forint 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 ...

実行時間:4ミリ秒99.64%
メモリ消費量:6 MB 100%

おすすめ

転載: www.cnblogs.com/jhjgarden/p/12688966.html