编程语言
首页 > 编程语言> > 【算法】在一个有序数组中,找>=某个数最左侧的位置

【算法】在一个有序数组中,找>=某个数最左侧的位置

作者:互联网

题目描述

在一个有序数组中,找>=某个数最左侧的位置

题解

用二分法的思想

public class BSLeft {
    
    public int findLeft(int[] arr,int x) {
        //数组为空或数组长度为0,返回-1
        if (arr == null || arr.length == 0) {
            return -1;
        }
        //调用二分搜索查找大于等于x最左侧的位置
        int result = bSLeft(arr,x,0,arr.length-1);
        //数组所有数都比x小,返回-1
        if (result > arr.length - 1) {
            return -1;
        }
        return result;
    }

    private int bSLeft(int[] arr,int x,int left,int right) {
        //当left > right时,若left合法,arr[left]>=x,arr[right]<x
        if (left > right) {
            return left;
        }
        //中间位置
        int mid = (left + right)/2;
        if (arr[mid] >= x) { //若中间位置的值大于等于x,继续在左半部分查找
            return bSLeft(arr,x,left,mid-1);
        } else { //若中间位置的值小于x,继续在右半部分查找
            return bSLeft(arr,x,mid+1,right);
        }
    }

    public static void main(String[] args) {
        //测试
        int[] arr = {1,1,1,2,2,2,3,3,3,3,4,4,4,4,5,5,5,8};
        System.out.println(new BSLeft().findLeft(arr, 3));
    }
}

标签:arr,right,return,int,mid,算法,数组,左侧,left
来源: https://www.cnblogs.com/hzyuan/p/15760417.html