无序数组的二分查找法
最近有个面试题,无序数组二分查找?不知道哪位变态要这么搞?有排序的功夫直接遍历查询不好吗?
无序数组二分,如果不排序,真不知道用二分法怎么搞,想用递归,搞了半天也没搞出来。
最后还是先排序,另一个数组保存排序前后的对应下标关系,二分法找到排序后的目标元素下标,根据下标关系数组获取原始下标。
package mianshi.算法.二分查找法.面试._1; public class MyBinaryTest { /** * @param args */ public static void main(String[] args) { //int[] arr = {1,3,4,66,77,88,99}; int[] arr = {1,4,3,99,77,88,66};//{0,2,1,6,4,5,3}{1,3,4,66,77,88,99} // 下标变化数组 int[] indexArr = new int[arr.length]; for(int i=0;i<indexArr.length;i++){ indexArr[i] = i; } // 排序,排序后的下标对应关系。 for(int i=0;i<arr.length-1;i++){ for(int j=i+1;j<arr.length;j++){ if(arr[i]>arr[j]){ int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; int indexTemp = indexArr[i]; indexArr[i] = indexArr[j]; indexArr[j] = indexTemp; } } } int index = getBinarySearch(4,arr,indexArr); System.out.println(index); } private static int getBinarySearch(int ele, int[] arr, int[] indexArr) { int min = 0; int max = arr.length - 1; int mid = 0; while(min <= max){ mid = (min + max ) >> 1; if(ele > arr[mid]){ min = mid + 1; } if(ele < arr[mid]){ max = mid - 1; } if(ele == arr[mid]){ return indexArr[mid]; } } return -1; } }
分类:
算法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!