有序的数组中找到某一目标值首次出现的下标

给定一个升序的数组,这个数组中可能含有相同的元素,并且给定一个目标值。要求找出目标值在数组中首次出现的下标。
思想:题目给出有序数组,应该想到利用二分查找来做。找到左邻居,使其值加一。利用二分查找,算法复杂度为O(logn) 

 

/**
 * @Auther: liuhaidong
 * Data: 2020/3/24 0024、23:31
 * Description:
 * @version: 1.0
 */
public class Test15 {
    public static void main(String[] args) {
        int[] nums = { 4,6,6,6,6 };
        System.out.println(find(nums,6));
    }
    public static int find(int[] nums,int target){
        int len = nums.length;
        if(len == 0 || nums == null){
            return -1;
        }
        int left = 0;
        int right = len-1 ;
        if (nums[right] < target) {
            return - 1;
        }
        while (left < right)
        {
            int mid = (left + right) / 2;
            if (nums[mid] < target) {
                left = mid + 1;
            } else {
                right = mid;
            }
        }
        if (nums[left] == target) {
            return left;
        } else {
            return -1;
        }
    }
}

类似题目:
找到有序数组中某一目标值在数组中的开始下标以及终止下标以及目标值出现的次数。也可以用下面的方法:

https://blog.csdn.net/weixin_41563161/article/details/103994964