【算法】在一个有序数组中,找>=某个数最左侧的位置
作者:互联网
题目描述
在一个有序数组中,找>=某个数最左侧的位置
题解
用二分法的思想
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