classSolution { public: vector<int> searchRange(vector<int> &nums, int target) { int n = nums.size(); int left = 0, right = n - 1; int mid;
vector<int> res; int index = -1; while (left <= right) { //查找左边界 mid = left + (right - left) / 2; if (nums[mid] >= target) { right = mid - 1; } else { left = mid + 1; } if (nums[mid] == target) index = mid; }
res.push_back(index);
left = 0; right = n - 1; index = -1; while (left <= right) { // 右边界 mid = left + (right - left) / 2; if (nums[mid] <= target) { left = mid + 1; } else { right = mid - 1; } if (nums[mid] == target) index = mid; } res.push_back(index);
classSolution { private: intsearch_range_end(vector<int> &nums, int target) { int n = nums.size(); int left = 0, right = n - 1, mid; while (left < right) { mid = left + (right - left + 1) / 2; if (nums[mid] <= target) left = mid; else right = mid - 1; }
return (nums[left] == target) ? left : -1; } intsearch_range_start(vector<int> &nums, int target) { int n = nums.size(); int left = 0, right = n - 1, mid; while (left < right) { mid = left + (right - left) / 2; if (nums[mid] >= target) right = mid; else left = mid + 1; }
return (nums[left] == target) ? left : -1; }
public: vector<int> searchRange(vector<int> &nums, int target) { if (nums.empty()) return { -1, -1 };