binary search

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]
	/**
	 * Find the minimum value in a sorted loop array
	 */
	public static int findMin(long[] arr,int lo,int hi){
		
		int mid = lo +(hi -lo )/2;
		if(lo==hi)return lo;
		//minimum is on the left
		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));
	}
}


Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324606457&siteId=291194637