Given an array of integers
nums
sorted in ascending order, 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]
.
Example 1:
Input: nums = [5,7,7,8,8,10]
, target = 8
Output: [3,4]
Example 2:
Input: nums = [5,7,7,8,8,10]
, target = 6
Output: [-1,-1]
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
vector<int> ans = {-1, -1};
int start = 0, end = nums.size() - 1;
if (nums.size() == 0) {
return ans;
}
int left = -1;
while (start <= end) {
int mid = start + (end - start)/2;
if (nums[mid] == target) {
if (mid == start) {
left = start;
break;
}
if (nums[mid - 1] < target) {
left = mid;
break;
} else {
end = mid - 1;
}
} else if (nums[mid] > target) {
end = mid - 1;
} else {
start = mid + 1;
}
}
int right = -1;
start = 0;
end = nums.size() - 1;
while (start <= end) {
int mid = start + (end - start)/2;
if (nums[mid] == target) {
if (mid == end) {
right = end;
break;
}
if (nums[mid + 1] > target) {
right = mid;
break;
} else {
start = mid + 1;
}
} else if (nums[mid] > target) {
end = mid - 1;
} else {
start = mid + 1;
}
}
return vector<int>{left, right};
}
};
No comments:
Post a Comment