leetcode-ソート配列で要素の最初の位置と最後の位置を検索-java


トピックの説明:昇順に配列された整数配列numsと、ターゲット値targetを指定します.配列内の所定のターゲット値の開始位置と終了位置を特定します.
あなたのアルゴリズムの時間複雑度はO(log n)レベルでなければなりません.
配列にターゲット値が存在しない場合は、[-1,-1]を返します.
例1:
入力:nums=[5,7,7,8,8,10],target=8出力:[3,4]
例2:
入力:nums=[5,7,7,8,8,10],target=6出力:[-1,-1]
構想:実は最も左の境界の問題を求めて、targetに出会って焦らないで飛び出して、最も左のtargetの下標を得ることです.
class Solution {
    public int[] searchRange(int[] nums, int target) {
    	//target     
        int first = findTarget(nums,target);
        //target+1     
        int last = findTarget(nums,target+1) - 1;
        if(first == nums.length || nums[first] != target){
            return new int[]{-1,-1};
        }else{
            return new int[]{first,last};
        }
    }
    public int findTarget(int[] nums, int target){
        int start = 0,end = nums.length;
        while(start < end){
            int mid = (end - start)/2 + start;
            if(nums[mid] < target){
                start = mid + 1;
            //     ,    
            }else{
                end = mid;
            }
        }
        return end;
    }
}