public static int findNumFromArr(long[] arr,long num,int lo,int hi){ int res=-1; if(arr==null||lo>hi)return res; int mid = lo +(hi-lo)/2; if(arr[mid]<num){ return findNumFromArr(arr, num,mid+1,hi); }else if(arr[mid]>num){ return findNumFromArr(arr, num,lo,mid-1); }else{ return mid; } } // [6,7,1,2,3,4,5] // [4,5,6,1,2] // [4,5,6,3,4] /** * 在有序循环数组中找到最小值 */ public static int findMin(long[] arr,int lo,int hi){ int mid = lo +(hi -lo )/2; if(lo==hi)return lo; //最小值在最左边 if(arr[lo] < arr[hi]){ return lo; }else { if(arr[lo]>arr[mid]){ return findMin(arr,lo+1,mid); }else{ if(arr[mid]>arr[hi]){ return findMin(arr,mid+1,hi); }else{ return findMin(arr,mid,hi-1); } } } } public static void main(String[] args) { long[] arr = {4,4,5,5,4}; // System.out.println(findNumFromArr(arr, 7,0,arr.length-1)); System.out.println(findMin(arr,0,arr.length-1)); } }
二分法查找
原创pilipaladuang ©著作权
©著作权归作者所有:来自51CTO博客作者pilipaladuang的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:如何判断一个单链表是否有环?
下一篇:不用比较找到数组中两个不同的值
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
折半查找法/二分法
在有序(设为升序)表中,取中间元素作为比
二分法 折半查找 数据 键盘输入 数组 -
202,查找-二分法查找
二分法查找适用于大的数据,但前提条件是数据必须是有序的,他的原理是先和中间的比较,如果等于就直接返回,如果小
二分法 数据 数组 二分法查找 while循环 -
查找算法--二分法
则确定新的查找区间。 如果array[mid]>key,则由表的
时间复杂度 二分查找 数据