配列の最初の要素を検索し、最後に並べ替え

NUMSターゲットとつの目標値に応じて、昇順に配列された整数の配列を考えます。アレイ内の所与の標的の開始および終了位置を特定します。

アルゴリズムのあなたの時間の複雑さはO(ログn)のレベルでなければなりません。

標的がアレイ内に存在しない場合、戻り[-1、-1]。

例1:

入力:NUMS = [5,7,7,8,8,10]、目標 = 8
出力:[3,4]
実施例2:

入力:NUMS = [5,7,7,8,8,10]、目標 = 6
出力:[-1、-1]

回答:

公共 のint []探索範囲(INT [] NUMS、int型のターゲット){
         INT [] RES = { - 1、-1 }。
        もし(!NUMS = NULL && nums.length> 0 ){
             int型 _0 = -1 int型 _1 = -1 ;
            int型 LO = 0 ;
            int型 HI = nums.length-1 ;
            一方(LO <= HI){
                 int型ミッド=(LO + HI)/ 2 もし(NUMS [中間]> ターゲット){ 
                    HI =半ば1 
                } そう であれば(NUMS [中間] < ターゲット){ 
                    LO =ミッド+ 1 
                } {
                     INT turnLeft = ミッド。
                    int型 turnRight = ミッド;
                    一方、(turnLeft> = LO || turnRight <= HI){
                         場合(_0> -1 && _ 1> -1 ){
                             ブレーク
                        } 
                        であれば(_0 == - !1 &&(turnLeft> = LO &&(turnLeft-1)> = 0 && NUMS [turnLeft-1] =目標)||(turnLeft == LO && NUMS [turnLeft] == ターゲット)){
                            _0 turnLeft; 
                        } 
                        であれば(_1 ==! - 1 &&(turnRight <= HI &&(turnRight + 1)<nums.length && NUMS [turnRight + 1] =目標)||(turnRight == HI && NUMS [turnRight] == ターゲット)){ 
                            _1 = turnRight ; 
                        } 
                        turnLeft - 
                        turnRight ++ ; 
                    } 
                    RES [ 0] = _0。
                    RES [ 1] = _1。
                    休憩; 
                } 
            } 
        }
        リターンのres; 
    }
コードの表示

 

出典:滞在ボタン(LeetCode)
リンクします。https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array

おすすめ

転載: www.cnblogs.com/wuyouwei/p/11936025.html