class Solution {
public:
int find_left(int A[], int s, int t, int target) {
int l = s;
int r = t;
while (l <= r) {
int p = (l + r) / 2;
if (A[p] < target)
l = p + 1;
else
r = p - 1;
}
return l;
}
int find_right(int A[], int s, int t, int target) {
int l = s;
int r = t;
while (l <= r) {
int p = (l + r) / 2;
if (A[p] > target)
r = p - 1;
else
l = p + 1;
}
return r;
}
vector<int> searchRange(int A[], int n, int target) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<int> ret;
int s = 0;
int t = n - 1;
while (s <= t) {
int p = (s + t) / 2;
if (A[p] == target) {
int l = find_left(A, s, p, target);
int r = find_right(A, p, t, target);
ret.push_back(l);
ret.push_back(r);
return ret;
} else if (A[p] < target) {
s = p + 1;
} else {
t = p - 1;
}
}
ret.push_back(-1);
ret.push_back(-1);
return ret;
}
};
Small Case: 12ms
Large Case: 64ms
Time: O(lgn)
Space: O(1)