【算法】在一个有序数组中,找>=某个数最左侧的位置
题目描述
在一个有序数组中,找>=某个数最左侧的位置
题解
用二分法的思想
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));
}
}
本文来自博客园,作者:hzyuan,转载请注明原文链接:https://www.cnblogs.com/hzyuan/p/15760417.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)