class Solution {
public:vector<int> searchRange(int A[], int n, int target) {
int low = binarylow(A,n,target);
vector<int> ans;
ans.push_back(low);
low = binary(A,n,target);
ans.push_back(low);
return ans;
}
int binarylow(int A[],int n,int target){
if(n==0)return -1;
int low = 0,high = n-1;
while(low<high){
int mid = low+((high-low)>>1);
if(A[mid]>=target){
high = mid;
}else {
low = mid+1;
}
}
if(A[high]==target)return high;
else return -1;
}
int binary(int A[],int n,int target){
if(n==0)return -1;
int low = 0,high = n-1;
while(low<high){
int mid = low+((high-low)>>1);
if(A[mid]<=target)low = mid+1;
else high = mid;
}
if(A[low]==target)return low;
if(low>0 && A[low-1]==target)return low-1;
return -1;
}
};
本文介绍了一种使用二分查找算法来寻找目标元素在有序数组中首次和末次出现的位置的方法。通过两个辅助函数实现,分别找到目标元素的起始位置和结束位置。

被折叠的 条评论
为什么被折叠?



