包含重复元素的二分查找

一般的二分查找只要求找到目标元素的位置,但是不保证该位置是否为该元素出现的第一个位置或者最后一个位置,现在想输出该元素第一次出现的位置:

public class BinarySearchFirstOne {
    public static void main(String[] args) {
        int[] arr = {1,2,3,3,3,4,5,5,6,7,7,7,8,9,9};
        int target = 7;
        
        System.out.println(search(arr, target));

    }
    public static int search(int[] arr, int target) {
        int lo = 0;
        int hi = arr.length - 1;
        int mid;
        while(lo < hi) {
            mid = (lo + hi) >> 1;
            if(arr[mid] < target) {
                lo = mid +1;
            }
            else
                hi = mid;
        }
        if(arr[lo] == target) {
            return lo;
        }
        else
            return -1;
    }
}

猜你喜欢

转载自www.cnblogs.com/xuhaojun/p/9108753.html
今日推荐