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 }

浙公网安备 33010602011771号