http://www.lintcode.com/zh-cn/problem/search-in-rotated-sorted-array/
错误点:
注意点: 先定中线位置或者target位置都可以,目的是先区分出来是原始的递增序列还是旋转序列;
在对应位置确定后如何进行区间的缩小需要考虑清楚。

1 public int search(int[] A, int target) { 2 if(A == null || A.length == 0) return -1; 3 int start = 0, end = A.length - 1; 4 while(end - start > 1) { 5 int mid = start + (end - start) / 2; 6 if(A[mid] == target) return mid; 7 //先定target的位置,在二象限还是四象限; 8 if(A[start] > target) { //四象限 9 if(A[mid] <= A[end] && A[mid] > target) { 10 end = mid; 11 } else { 12 start = mid; 13 } 14 } else { //二象限或者递增序列 15 if(A[mid] >= A[start] && A[mid] < target) { 16 start = mid; 17 } else { 18 end = mid; 19 } 20 } 21 } 22 if(A[start] == target) return start; 23 if(A[end] == target) return end; 24 return -1; 25 } 26 27 public int search(int[] A, int target) { 28 if(A == null || A.length == 0) return -1; 29 int start = 0, end = A.length - 1; 30 while(end - start > 1) { 31 int mid = start + (end - start) / 2; 32 if(A[mid] == target) return mid; 33 //先定中线位置,二三象限还是一四象限 34 if(A[mid] > A[end]) { 35 //二三象限 36 if(A[start] <= target && A[mid] > target) { 37 end = mid; 38 } else { 39 start = mid; 40 } 41 } else { 42 //一四象限或者递增 43 if(A[end] >= target && A[mid] < target) { 44 start = mid; 45 } else { 46 end = mid; 47 } 48 } 49 } 50 if(A[start] == target) return start; 51 if(A[end] == target) return end; 52 return -1; 53 }