[Cpp]
Class Solution {
// Observation is the key, try to solve it by modifying binary search
Public:
Int search (int A [], int n, int target ){
// Start typing your C/C ++ solution below
// Do not write int main () function
Int l = 0;
Int r = n-1;
While (l <= r)
{
Int mid = l + (r-l)/2;
If (A [mid] = target) return mid;
If (A [l] <= A [mid]) // it is sorted in [l, mid], "=" contains an edge case: 3, 1
{
If (A [mid]> target & A [l] <= target)
R = mid-1;
Else
L = mid + 1;
}
Else // [mid, r] must be sorted, if [l, mid] not sorted
{
If (A [mid] <target & A [r]> = target)
L = mid + 1;
Else
R = mid-1;
}
}
Return-1;
}
};
Class Solution {
// Observation is the key, try to solve it by modifying binary search
Public:
Int search (int A [], int n, int target ){
// Start typing your C/C ++ solution below
// Do not write int main () function
Int l = 0;
Int r = n-1;
While (l <= r)
{
Int mid = l + (r-l)/2;
If (A [mid] = target) return mid;
If (A [l] <= A [mid]) // it is sorted in [l, mid], "=" contains an edge case: 3, 1
{
If (A [mid]> target & A [l] <= target)
R = mid-1;
Else
L = mid + 1;
}
Else // [mid, r] must be sorted, if [l, mid] not sorted
{
If (A [mid] <target & A [r]> = target)
L = mid + 1;
Else
R = mid-1;
}
}
Return-1;
}
};