-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrange_search.java
More file actions
103 lines (92 loc) · 2.58 KB
/
range_search.java
File metadata and controls
103 lines (92 loc) · 2.58 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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
public class Solution {
public int[] searchRange(int[] A, int target) {
// Start typing your Java solution below
// DO NOT write main() function
int[] range=new int[]{-1,-1};
int lower = 0,n=A.length-1;
int upper = n;
int mid;
// Search for lower bound
while (lower <= upper) {
mid = (lower + upper) / 2;
if (A[mid] < target)
lower = mid + 1;
else
upper = mid-1;
}
// If the target is not found, return (-1, -1)
if (lower==A.length||A[lower] != target)
return range;
range[0] = lower;
// Search for upper bound
upper = n;
while (lower <= upper) {
mid = (lower + upper) / 2;
if (A[mid] > target)
upper = mid-1;
else
lower = mid + 1;
}
range[1] = upper;
return range;
}
}
public class Solution {
public int[] searchRange(int[] A, int target) {
// Start typing your Java solution below
// DO NOT write main() function
int l=0,r=A.length-1;
while(l<=r) {
int mid=l+(r-l)/2;
if(A[mid]>target) r=mid-1;
else if(A[mid]<target) l=mid+1;
else {
int s=bs(A,l,mid-1,target-0.1);
int e=bs(A,mid+1,r,target+0.1);
return new int[]{s,e-1};
}
}
return new int[]{-1,-1};
}
public int bs(int[] A,int l,int r,double target) {
while(l<=r) {
int mid=l+(r-l)/2;
if(A[mid]>target) r=mid-1;
else if(A[mid]<target) l=mid+1;
//else return mid;
}
return l;
}
}
class Solution {
public:
vector<int> searchRange(int A[], int n, int target) {
vector<int> range(2, -1);
int lower = 0;
int upper = n;
int mid;
// Search for lower bound
while (lower < upper) {
mid = (lower + upper) / 2;
if (A[mid] < target)
lower = mid + 1;
else
upper = mid;
}
// If the target is not found, return (-1, -1)
if (A[lower] != target)
return range;
range[0] = lower;
// Search for upper bound
upper = n;
while (lower < upper) {
mid = (lower + upper) / 2;
if (A[mid] > target)
upper = mid;
else
lower = mid + 1;
}
range[1] = upper - 1;
return range;
}
};