33. Search in Rotated Sorted Array

要是mid比最右边的数小的话,mid到最右边就是有序的。要是target处于mid和最右边之间的话,就可以从mid+1开始search。反之则有序的left到mid,可以判断下target是不是在left和mid的区间内,是的话则从mid-1开始search。

判断是否在区间的时候,注意left或者right都是要考虑等于号

 

 

 1 class Solution {
 2     int search(int A[], int target) {
 3         int n = A.length;
 4         if (n == 0) return -1;
 5         int left = 0, right = n - 1;
 6         while (left <= right) {
 7             int mid = left + (right - left)/2;
 8             if (A[mid] == target) return mid;
 9             else if (A[mid] < A[right]) {
10                 if (A[mid] < target && A[right] >= target) left = mid + 1;
11                 else right = mid - 1;
12             } else {
13                 if (A[left] <= target && A[mid] > target) right = mid - 1;
14                 else left = mid + 1;
15             }
16         }
17         return -1;
18     }
19 }

 

posted @ 2018-07-30 21:07  jasoncool1  阅读(146)  评论(0)    收藏  举报