二分法查找
標簽:
算法與數(shù)據(jù)結構
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)); }}
點擊查看更多內(nèi)容
為 TA 點贊
評論
評論
共同學習,寫下你的評論
評論加載中...
作者其他優(yōu)質(zhì)文章
正在加載中
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦