LeetCodeブラシタイトル--35。挿入位置を検索する(シンプル)

タイトル説明

ソートされた配列とターゲットを考えると、配列内のオブジェクトを検索し、そのインデックスを返します。標的がアレイに存在しない場合、それが配列に挿入された位置に戻されます。

あなたは、アレイ内のことは、重複要素をとることができます。

例1:

入力:[1,3,5,6]、5
出力:2

例2:

入力:[1,3,5,6]、2
出力:1

例3:

入力:[1,3,5,6]、7
出力:4

例4:

入力:[1,3,5,6]、0
出力:0

 

アイデア:二分法

  • 被験者場合暴力のが解決することが必要O(N)時間の複雑さが、二つの点場合、それはに減少させることができるO(LOGN)時間計算
  • 最初は左の添字が設定され、左と右の添え字は、そして中間の添字の計算中旬を
  • 当たりNUMS [MID ]と目標同等のサイズを決定するための直接の添え字を返し、NUMS [中間] < ターゲットがされ、左から右へNUMS [MID ]> ターゲット
  • 返されない値が左に等しくなければ検索が終了すると、その挿入位置であります
  • 二値の考え方を理解することは困難を見つけるが、境界条件を追加するかどうかなどのように、エラーを起こしやすい1マイナスの関係の終わりに1サイクルは、左と右の条件は、更新が左と右の場所。

 

テンプレート

境界条件のエラーを排除、テンプレートのようなことを忘れないでください。

クラスソリューション{
     公共 のint searchInsert(INT [] NUMS、INT ターゲット){
         int型左= 0、右= nums.length - 1。// 注意
        しながら(左<=右){ // 注意
            INT半ば=(左+右)/ 2。// 注意
            場合(== NUMS [中間]目標){ // 注意
                 // 相关逻辑 
            } そう であれば(<NUMS [中間] 目標){ ミッド+ 1 =。// 注意 
            }  { = MID - 1; // 
            } 
        } 
        // 相関値戻る
        戻り 0 ; 
    } 
}

 

 

コードの実装

クラスソリューション{
     公共 のint searchInsert(INT [] NUMS、INT ターゲット){
         // 左と右の添字の定義は、添字左右
        INT。、右= nums.length左= 0 - 1 しばらく(左<= 右) {
             INT MID =(右+左)/ 2 ;
             // 場合等しいNUMS [中間]とターゲット要素、直接リターン
            のiF(NUMS [中間] == ターゲット){
                 リターンMID;
                 // NUMSなら[中間]未満目標より次の間隔のための要素、左右[ミッド+ 1、右] 
            }  IF(NUMS [MID] < ターゲット){ = MID + 1 ;
                 // 一方、目標要素よりNUMS [中間]以上、左右[左、中間1]次の間隔の間 
            } {  = MID - 1 ; 
            } 
        } 
        // 端を見つけた場合戻り値が左に等しくない場合、値は挿入された位置の
        復帰は、左; 
    } 
}

 

おすすめ

転載: www.cnblogs.com/xiaozhongfeixiang/p/12439277.html