-
Notifications
You must be signed in to change notification settings - Fork 0
/
Day19-Search-in-Rotated-Sorted-Array.cpp
68 lines (53 loc) · 1.47 KB
/
Day19-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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
class Solution {
public:
int search(vector<int>& nums, int target) {
if (nums.empty()) return -1;
int l = 0;
int r= nums.size() -1;
int ans = -1;
int mid;
while ( r >= l ) {
mid = l + ((r-l) /2);
if (nums [mid] > nums [nums.size() -1] )
l = mid +1;
else{
ans = mid ;
r= mid -1;
}
}
if (ans == 0) {
l =0; r= nums.size() -1;
ans = -1;
while ( r >= l) {
mid = l +(r-l) /2;
if ( target == nums [mid]) return mid;
else if ( target > nums [mid] ){
l = mid +1;
}
else r = mid -1;
}
return ans;
}
else if (target < nums [0]) {
l=ans; r =nums.size() -1 ;
while ( r >= l) {
mid = l +(r-l)/2;
if (nums [mid] < target ){
l = mid +1; }
else if (nums [mid] == target)return mid;
else r = mid -1;
}
return -1;
}
else {
l=0; r= ans;
while ( r >= l) {
mid = l +(r-l)/2;
if (nums [mid] < target ){
l = mid +1; }
else if (nums [mid] == target)return mid;
else r = mid -1;
} return -1;
}
}
};