JasonChang

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

判断左右哪一半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 }

 

 

posted on 2013-11-13 15:14  JasonChang  阅读(152)  评论(0编辑  收藏  举报