Найти интервал бинарный поиск ---

Найти интервал

34. Найти первый и последний Положение элемента в отсортированном массиве

Input: nums = [5,7,7,8,8,10], target = 8
Output: [3,4]

Input: nums = [5,7,7,8,8,10], target = 6
Output: [-1,-1]

Тема Описание:

  Подсчитайте количество раз число, которое появляется в массиве сортировки.

Анализ идей:

  Этот вопрос известен под названием принадлежит отсортировать массив, чтобы найти проблему, то мы сначала думали, это бинарный поиск. Из-за того, сколько раз, чтобы найти число, которое появляется в массиве сортировки, мы просто убедитесь, что место и положение последнего вхождения первого вхождения этого числа таким образом, мы можем вычислить, сколько раз он появляется в массиве. Бинарный алгоритм поиска, чтобы сделать первый промежуточный цифровой и K массива для сравнения, если число больше, чем в середине К, то нам просто необходимо найти следующий раунд первого полупериода. Если меньше K, то мы рассмотрим во второй половине. Если K равно, что мы должны определить, что это не первый K K, прежде, чем мы должны видеть, является ли число K, если нет, то среднего числа является первым K, если предыдущее число K, то первым K, конечно, мы рассмотрим в первой половине предыдущего пункта, на следующем этапе массива. Же предпринять, чтобы найти последний K первый промежуточный массив цифровых и K для сравнения, если число больше, чем в середине К, то нам просто необходимо найти следующий раунд первого полупериода. Если меньше K, то мы рассмотрим во второй половине. Если равно K, что мы должны определить K не последний K, то мы должны смотреть после того, как число не является K, если нет, то число промежуточных и конечных K, если число K, то последний K конечно, после половины, на следующем этапе массива мы рассмотрим во второй половине.

Код:

public int[]searchRange(int []nums,int target){
    if(nums==null||nums.length==0)
        return null;
    int first=0;
    int last=0;
    first=getFirst(nums,0,nums.length-1,target);
    last=getLast(nums,0,nums.length-1,target);
    if(first>-1&&last>-1){
        return new int[]{first,end};
    }
    return null;
}
public int getFirst(int []nums,int l,int h,int target){
    if(l>h)
        return -1;
    int mid=l+(h-l)/2;
    if(nums[mid]==target){
        if(mid>0&&nums[mid-1]!=target||mid==0){
            return mid
        }else{
            h=mid-1;
        }
    }else if(nums[mid]>target){
        h=mid-1;
    }else{
        l=mid+1;
    }   
     return getFirst(nums,l,h,target);
}
public int getLast(int []nums,int l,int h,int target){
    if(l>h)
        return -1;
    int mid=l+(h-l)/2;
    if(nums[mid]==target){
        if(mid<nums.length-1&&nums[mid+1]!=target||mid==nums.length-1){
            return mid;
        }else{
            l=mid+1;
        }
    }else if(nums[mid]>target){
        h=mid-1;
    }else{
        l=mid+1;
    }
    return getLast(nums,l,h,target);
}

рекомендация

отwww.cnblogs.com/yjxyy/p/11106736.html
рекомендация