Just skip the duplicated ones.
1 class Solution { 2 public: 3 bool search(int A[], int n, int target) { 4 int start = 0, end = n-1, mid = 0; 5 while (start <= end) { 6 while (start <= end && A[start] == A[start+1]) start++; 7 while (start <= end && A[end] == A[end-1]) end--; 8 mid = (start + end)/2; 9 if (A[mid] == target) return true; 10 if (A[mid] >= A[start]) { 11 if (A[mid] < target) { 12 start = mid + 1; 13 } else if (A[start] <= target) { 14 end = mid-1; 15 } else start = mid+1; 16 } else { 17 if (A[mid] > target) { 18 end = mid-1; 19 } else if (A[end] >= target) { 20 start = mid+1; 21 } else end = mid-1; 22 } 23 } 24 return false; 25 } 26 };