LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置
解题思路:这里先使用二分法寻找到第一个位置,在从第一个位置开始挨个(循环)寻找最后一个位置。
当然,最后一个位置也可以使用二分的方法完成。
代码实现:
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
vector<int> res(2, -1);
if (0 == nums.size()) return res;
//利用二分法寻找第一次出现目标值的位置
int start = 0, end = nums.size() - 1;
while (start + 1 < end) {
int mid = start + (end - start) / 2;
if (target == nums[mid]) end = mid;
else if (target < nums[mid]) end = mid;
else start = mid;
}
if (target == nums[start]) res[0] = start;
else if (target == nums[end]) res[0] = end;
//寻找结尾位置
if (res[0] != -1) {
int endPos = res[0] + 1;
while (endPos < nums.size()) {
if (target == nums[endPos]) endPos++;
else break;
}
res[1] = endPos - 1;
}
return res;
}
};