-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path33_Search in Rotated Sorted Array.cpp
49 lines (46 loc) · 1.2 KB
/
33_Search in Rotated Sorted Array.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
class Solution {
public:
int get_min(const vector<int> &A)
{
int n = A.size()-1;
long mid, left = 0, right = A.size()-1;
while( left <= right)
{
if(A[0] <= A[n])
return 0;
mid = (left + right) /2;
//cout<<left<<" "<<mid<<" "<<right<<" ";
if( (mid < right && A[mid] > A[mid+1]))
return mid+1;
if( (A[mid] <= A[ (mid+n -1) % n ]) && (A[mid] <= A[ ( mid +1) % n ]) )
return mid;
else if( A[mid] >= A[left] )
left = mid +1;
else
right = mid-1;
}
return -1;
}
int binaryse(vector<int>& A, int left,int right,int k )
{
int mid;
while(left <= right)
{
mid = left + ( right-left) /2;
if(A[mid] == k)
return mid;
else if ( A[mid] > k )
right = mid -1;
else
left = mid + 1;
}
return -1;
}
int search(vector<int>& A, int target) {
int mn = get_min(A);
int x = binaryse(A, 0, mn-1 ,target) ;
if( x != -1)
return x;
return binaryse(A , mn , A.size()-1 ,target);
}
};