Given a sorted array of integers, find the starting and ending position of a given target value.
Your algorithm's runtime complexity must be in the order of O(log n).
If the target is not found in the array, return
[-1, -1]
.
For example,
Given
return
Given
[5, 7, 7, 8, 8, 10]
and target value 8,return
[3, 4]
.class Solution { public: vector<int> searchRange(vector<int>& nums, int target) { int start = 0; int end = nums.size() - 1; int mid = -1; vector<int> res; while(start <= end) { mid = start + (end-start)/2; if(nums[mid] == target) break; if(nums[mid] < target) start = mid + 1; else end = mid - 1; } if(start > end) { res.push_back(-1); res.push_back(-1); return res; } int send = mid; while(start <= send) { int smid = start + (send-start)/2; if(nums[smid] < target) start = smid + 1; else send = smid - 1; } res.push_back(start); start = mid; while(start <= end) { int smid = start + (end-start)/2; if(nums[smid] == target) start = smid + 1; else end = smid - 1; } res.push_back(end); return res; } };