タイトル:
整数配列NUMSと目標値の目標を考えると、配列内の二つの整数の目標値を特定し、その配列の添字に戻るにお願いします。
あなたは、各入力が一つだけ答えに対応することを想定することができます。ただし、同じ配列要素を再使用することはできません。
例:
考えるNUMSの= [2、7、11 、15]、目標= 9
ためNUMS [0] + NUMS [1 ] = 2 + 7 = 9
返される[0,1]
暴力的な解決策:(ダブルループ)
クラスソリューション{ / * * * @param整数[] $ NUMS * @param整数$対象 * @return整数[] * / 関数 twoSum($ NUMS、$ターゲット){ $ RES = 配列(); $カウント = カウント数($ NUMS )。 以下のために($ I = 0; $ iが < $カウント -1を; $ iの ++ ){ のために($ jを = $ I +1; $ jの < $数えます。$のJ ++ ){ $合計 = $ NUMS [ $ I ] + $ NUMS [ $のJ ]。 もし($和 == $ターゲット){ $のRES = [ $ I、$のJ ]。 } } } を返す $解像度を。 } }
1900ミリ秒で実行、メモリの消費15.8Mb
最適化:(キーリバーサル)
クラスソリューション{ / * * * @param整数[] $ NUMS * @param整数$対象 * @return整数[] * / 関数 twoSum($ NUMS、$ターゲット){ $見出さ = []; foreachの($ NUMS として $キー => $ valの){ $差分 = $ターゲット - $ valを、 もし(!ISSET($見つかっ [ $差分])){ $見つかったが、 [ $ valの] = $キー。 続け; } リターン [ $キー、$見つかった [ $デフ]]; } } }
12msので実行、メモリの消費16.1Mb
第1の方法は、最も時間のかかるの最も暴力的である、第二の方法は、時間のためのスペースを使用することです