搜索时间复杂度要求O(log(n)),又是有序的数组,所以用二分搜索。
class Solution
{
public:
vector<int> searchRange(vector<int> &nums, int target)
{
vector<int> res(2, -1);
if (nums.size() == 0)
return res;
int mid = BinarySearch(nums, target, 0, nums.size() - 1);
if (mid == -1)
return res;
int left = mid;
while (left > 0 && nums[left - 1] == target)
--left;
res[0] = left;
int right = mid;
while (right < nums.size() - 1 && nums[right + 1] == target)
++right;
res[1] = right;
return res;
}
int BinarySearch(vector<int> &nums, int target, int beg, int end)
{
if (beg > end)
return -1;
int mid = beg + (end - beg) / 2;
if (nums[mid] == target)
return mid;
else if (nums[mid] > target)
return BinarySearch(nums, target, beg, mid - 1);
else
return BinarySearch(nums, target, mid + 1, end);
}
};