-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path33_gp.cpp
More file actions
60 lines (49 loc) · 1.65 KB
/
Copy path33_gp.cpp
File metadata and controls
60 lines (49 loc) · 1.65 KB
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
class Solution {
public:
int search(vector<int>& nums, int target) {
int left = 0;
int right = nums.size()- 1;
// equal import
while(left <= right){
int mid = left + (right - left)/2;
int val_left = nums[left];
int val_mid = nums[mid];
int val_right = nums[right];
cout << val_left << " " << val_mid << " " << val_right << endl;
if(target == val_mid)
return mid;
// equal important
if(val_left <= val_mid){
if(val_left <= target && target < val_mid){
return regularBinarySearch(nums, left, mid, target);
}else{
left = mid + 1;
}
}else{
if(val_mid < target && target <= val_right){
return regularBinarySearch(nums, mid, right, target);
}else{
right = mid - 1;
}
}
cout << left << " " << right << endl;
}
return -1;
}
int regularBinarySearch(vector<int>& nums, int l, int r, int target){
cout << "regular" << endl;
cout << l << " " << r << endl;
// equal important
while(l <= r){
int mid = l + (r - l) / 2;
if(nums[mid] == target)
return mid;
if(nums[mid] > target){
r = mid - 1;
}else{
l = mid + 1;
}
}
return -1;
}
};