LeetCode 34 Find First and Last Position of Element in Sorted Array
思路
通过二分查找,找到target第一次出现的位置。 再次通过二分查找,找到target最后一次出现的位置。
二分查找统一使用 左闭右开区间 。因此,在第一次查找结束后,需要检查 left >= nums.size() || nums[left] != target,来判断target是否在数组中出现。如果 left >= nums.size() 成立,则target大于nums中的所有元素;如果 nums[left] != target 成立,则target不在数组中。
代码
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
if (nums.empty()) return {-1, -1};
int left = 0, right = nums.size(), mid;
while (left < right) {
mid = left + (right - left) / 2;
if (nums[mid] < target) left = mid + 1;
else right = mid;
}
if (left >= nums.size() || nums[left] != target) return {-1, -1};
vector<int> rs{left, -1};
right = nums.size();
while (left < right) {
mid = left + (right - left) / 2;
if (nums[mid] > target) right = mid;
else left = mid + 1;
}
rs[1] = right - 1;
return rs;
}
};