classSolution { public: intfindFirst(vector<int>& nums, int target){ int left = 0, right = nums.size() - 1, ans = -1; while( left <= right){ int mid = left + (right - left) / 2; if(nums[mid] == target){ ans = mid; right = mid - 1; //keep searching the left }elseif (nums[mid] < target){ left = mid + 1; }else { right = mid - 1; } }
return ans; }
intfindLast(vector<int>& nums, int target){ int left = 0, right = nums.size() -1, ans = -1; while(left <= right){ int mid = left + (right - left) / 2; if(nums[mid] == target){ ans = mid; left = mid + 1; //keep searching the right; }elseif (nums[mid] < target){ left = mid + 1; }else{ right = mid -1; } }
return ans; }
vector<int> searchRange(vector<int>& nums, int target){ int n = nums.size(); //vector<int> re;
if(n == 0){ vector<int> v = {-1, -1}; return v; }
int left = findFirst(nums, target); int right = findLast(nums, target);