日々の疑問をLeetCode(A):2つの数の合計

タイトル:
整数配列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の方法は、最も時間のかかるの最も暴力的である、第二の方法は、時間のためのスペースを使用することです

 

おすすめ

転載: www.cnblogs.com/jongty/p/11653700.html