Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Solution {
- private:
- int binarySearch(vector<int>& arr, int l, int r, int target)
- {
- if (r >= l) {
- int mid = l + (r - l) / 2;
- // If the element is present at the middle
- // itself
- if (arr[mid] == target)
- return mid;
- // If element is smaller than mid, then
- // it can only be present in left subarray
- if (arr[mid] > target)
- return binarySearch(arr, l, mid - 1, target);
- // Else the element can only be present
- // in right subarray
- return binarySearch(arr, mid + 1, r, target);
- }
- // We reach here when element is not
- // present in array
- return -1;
- }
- public:
- vector<int> searchRange(vector<int>& nums, int target) {
- vector<int> returnResult;
- int resultindex = binarySearch(nums, 0, nums.size()-1, target);
- if(resultindex == -1) {
- returnResult.push_back(-1);
- returnResult.push_back(-1);
- } else {
- //now that we have an index of 1 item, search start and end.
- int start=resultindex;
- int end=resultindex;
- while(nums[start]==target && start > 0) {
- start--;
- }
- if(nums[start] != target) {
- start++;
- }
- while(nums[end]==target && end < nums.size()) {
- end++;
- }
- if(nums[end] != target) {
- end--;
- }
- returnResult.push_back(start);
- returnResult.push_back(end);
- }
- return returnResult;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement