You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
classSolution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
int n = nums.size();
int left = 0, right = n;
vector<int> res;
while (left < right) {
int mid = left + (right - left) / 2;
if (nums[mid] < target) left = mid + 1;
else right = mid;
}
if (right >= n || nums[right] != target)
res.push_back(-1);
else
res.push_back(right);
left = right, right = n;
while (left < right) {
int mid = left + (right - left) / 2;
if (nums[mid] <= target) left = mid + 1;
else right = mid;
}
if (right-1 < 0 || nums[right-1] != target)
res.push_back(-1);
else
res.push_back(right-1);
return res;
}
};
Given an array of integers nums sorted in ascending order, find the starting and ending position of a given target value.
If target is not found in the array, return [-1, -1].
You must write an algorithm with O(log n) runtime complexity.
Example 1:
Example 2:
Example 3:
Constraints:
两次使用二分法,第一次找第一个=target的元素,第二次找第一个>target的元素。代码如下:
类似题目:
[剑指 Offer] 53 - I. 在排序数组中查找数字 I
The text was updated successfully, but these errors were encountered: