leetcodeは、ソートされた配列を回転させます

回転したソート配列内leeetcode 33.検索

leetcode 81 

leetcode 153が回転ソート配列の最小を探します

これは、いくつかの類似点です:一部の配列を命じている、バイナリ検索を行うことができます。最も重要なのは、エンド残っているゾーンまたは右の範囲で決定することです。

leetcode 33:

IF(NUMSは、[MID]は==ターゲット)MIDを返し、
そうでなければIF(NUMS [MID] <ターゲット)
{ 
    //左半分の左上昇区間、インターバル必須可能でない場合、間隔の左半分であれば、非昇順( NUMS [L]> NUMS [中間 ])、 および
    //ターゲット> = NUMS [L] 、それは間隔の左半分でなければならない
    場合NUMS(NUMS [L]> NUMS [中間] &&ターゲット> = [L])R = 1中期; 
    。そう1 + L = MID;     
} 
{ 
    //右上り部場合、確かではない右半部、もし非右上昇部(NUMS [中間]> NUMS [ R])、 そして
    //ターゲット<= NUMS [R] 、それが右半部になければならない
    場合には(NUMS [MID]> NUMS [R&LT] &&ターゲット<= NUMS [R&LT])+ L = MID 1; 
    他のR&LT MID = - 1。
}

 

leetcode 81:複合体33のロットに比べて81、33ない問題NUMS [中間] == NUM​​S [R] || NUMS [L] == NUM​​S [中間]この場合、セグメント解析のサイズを比較することによって直接使用することができます最後に昇順または降順されます。81、標題NUMS [L] == NUM​​S [中間] || NUMS [中間] == NUM​​S [R]の間隔は昇順または非昇順であってもよいです。

NUMS [中間]は<ケースを標的とすることを命じている場合、左側のセクションは、例えば、可能な特定の部分を残し、そして非連続標的場合> = NUM​​S [L]は、左間隔でなければなりません。質問は、[中間] [L] == NUM​​Sケース決意間隔は非順序付け、NUMSにより、33個の質問[L]> NUMSを残していない方法[中間]ある特定の間隔は非順序付け左決定することができるが、NUMS左側のセクションが非注文することができ、それを注文することができます。左側のセクションは、NUMS [中間]を注文している場合、非順序付け、NUMS [中間] == NUM​​S [R]の左部分は、また、可能== NUM​​S [R]、そうNUMS [L] == NUM​​S [あれば中間] ==場合NUMS [R]、左側のセクションが決定された順序付けられていないか、非順序付け、今回はL、R必ずしも不可能なのでNUMS [L] == NUM​​S [中間] =ベース= NUM​​S [R]、L ++、r--の。 

所以当NUMS [中間] =目標&& NUMS [L] == NUM​​S [中間] && NUMS [中間] == NUM​​S [R] L ++、r--の!。

場合NUMS [中間] <目標、NUMSなら[L] == NUM​​S [中間]左間隔を注文する必要があり、その理由は、非順序付け、次いでNUMS [中間] == NUM​​S [R]の場合、その左部であるが、 NUMS [中期]ができない可能性が== NUM​​S [R]、間隔が範囲をソートままにしておく必要があります。その場合はNUMS [L]> NUMS [中期]、定数の非ソート範囲で左側のセクション。

IF(NUMS [L]> NUMS [中間] &&ターゲット> = NUM​​S [L])R =ミッド - 1。

他リットル=ミッド+ 1;

NUMS [中期]>対象画像の上で右クリックしたとき。

クラスのソリューション{ 
パブリック:
    ブール検索(ベクトル<整数>&NUMS、int型のターゲット)
    { 
        場合(nums.empty())のリターンはfalse; 
        
        INTはL = 0、R = nums.size() - 1; 
        一方、(L <= R)
        { 
            int型のミッド= L +(R - L)/ 2。
            
            (NUMS [中期] ==ターゲット)がtrueを返す場合は、
            そうであれば(NUMS [L] == NUMS [中間] && NUMS [中間] == NUMS [R])
            { 
                L ++。
                r--の; 
            } 
            そうであれば(NUMS [中間] <ターゲット)
            { 
                IF(NUMS [L]> NUMS [中間] &&ターゲット> = NUMS [L])R =ミッド- 1。
                他リットル=ミッド+ 1;
            { 
                IF(NUMS [中間]> NUMS [R] &&ターゲット<= NUMS [R])、L =ミッド+ 1。
                他のR =中旬- 1。
            } 
        } 
        falseを返します。
    } 
}。

  

問題に展開します。あなたはそれが最小のインデックス対象を求めている場合は?解像度の記録を持つ、非常にシンプルなものをNUMS [中期]リストで最小のすべてのミッド==ターゲット。

おすすめ

転載: www.cnblogs.com/mychen06/p/12630246.html