leetcode34。最初と最後の位置(二分法)でソートされた配列の要素を探します

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]

アイデア:最初の二分法は、要素を見つけ、その後、右へ左へと拡散

class Solution {
    public int[] searchRange(int[] nums, int target) {
      int[] res = {-1, -1};
      int length=nums.length;
            if (length== 0) return res;
      int left=0;
      int right=length-1;
    int mid=0;
    while(left<=right){
        mid=(left+right)/2;
       if (nums[mid] == target) {
                left = mid;
                right = mid;
                while (left > 0 && nums[left] == nums[left-1]) left--;
                while (right < length - 1 && nums[right] == nums[right+1]) right++;
                res[0] = left;
                res[1] = right;
                return res;
            }
        else if(nums[mid]>target){
            right=mid-1; 
        }
        else{
            left=mid+1;
        }  
    }
        return res;  
    }
}

おすすめ

転載: blog.csdn.net/rudychan/article/details/94389842