判断左右哪一半sorted对那一边进行binary search
1 public class Solution { 2 public boolean search(int[] A, int target) { 3 // IMPORTANT: Please reset any member data you declared, as 4 // the same Solution instance will be reused for each test case. 5 if(A == null) 6 return false; 7 int index = binarySearch(A, 0, A.length, target); 8 if(index < A.length && A[index] == target) 9 return true; 10 return false; 11 12 } 13 private int binarySearch(int[] A, int start, int end, int target){ 14 if(start >= end - 1 ) 15 return start; 16 int mid = (start + end) / 2; 17 if(A[mid] == target) 18 return mid; 19 if(A[start] == A[mid]){ 20 return binarySearch(A, start+1, end, target); 21 } 22 else if(A[start] < A[mid]){ 23 if(target > A[mid]) 24 return binarySearch(A, mid, end, target); 25 else if(target >= A[start]) 26 return binarySearch(A, start, mid, target); 27 else 28 return binarySearch(A, mid, end, target); 29 } 30 else{ 31 if(target < A[mid]) 32 return binarySearch(A, start, mid, target); 33 else if(target >= A[start]) 34 return binarySearch(A, start, mid, target); 35 else 36 return binarySearch(A, mid, end, target); 37 } 38 } 39 }