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  }
View Code