class Solution {
public:
vector<int> searchRange(int A[], int n, int target) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<int> pos;
int left = 0;
int right = n - 1;
int mid = -1;
while (left <= right) //搜索目标
{
mid = (left + right) >> 1;
if (A[mid] > target)
{
right = mid - 1;
}
else if (A[mid] < target)
{
left = mid + 1;
}
else
{
break;
}
}
if (left > right) //未找到
{
pos.push_back(-1);
pos.push_back(-1);
}
else //找到目标,搜索边界
{
//搜索左边界
left = 0;
right = mid;
int mid1 = -1;
while (left <= right)
{
mid1 = (left + right) >> 1;
if (A[mid1] == target)
{
right = mid1 - 1;
}
else if (A[mid1] < target)
{
left = mid1 + 1;
}
}
mid1 = A[mid1] < target ? mid1 + 1 : mid1;
pos.push_back(mid1);
//搜索右边界
left = mid;
right = n - 1;
mid1 = -1;
while (left <= right)
{
mid1 = (left + right) >> 1;
if (A[mid1] == target)
{
left = mid1 + 1;
}
else if (A[mid1] > target)
{
right = mid1 - 1;
}
}
mid1 = A[mid1] > target ? mid1 - 1 : mid1;
pos.push_back(mid1);
}
return pos;
}
};
LeetCode-Search for a Range
最新推荐文章于 2024-09-30 13:43:16 发布