两次二分法
vector<int> searchRange(vector<int>& nums, int target) {
int n = nums.size();
int l = 0, r = n - 1;
vector<int> ans = { -1,-1 };
if (n == 0) {
return ans;
}
int mid;
while (l < r) {
mid = l + (r - l) / 2;
if (nums[mid] < target) {
l = mid + 1;
}
else {
r = mid;
}
}
if (nums[l] == target) {
ans[0] = l;
}
l = 0; r = n - 1;
while (l < r) {
mid = l + (r - l) / 2;
if (nums[mid] > target) {
r = mid;
}
else {
l = mid + 1;
}
}
if (l == n - 1 && nums[l] == target) {
ans[1] = l;
}
else if (l - 1 >= 0 && nums[l - 1] == target) {
ans[1] = l - 1;
}
return ans;
}