1.普通查找
int getPos(vector<int> A, int n, int val) {
// write code here
if(A.size()==0 || n<=0){
return -1;
}
int low,high,mid;
low = 0;
high = n-1;
while(low<=high){
mid = (low+high)/2;
if(A[mid] == val){
return mid;
}
else if(A[mid] > val){
high = mid - 1;
}
else if(A[mid] < val){
low = mid + 1;
}
}
return -1;
}
2.如果查找的数字有多个,返回第一次的位置
int getPos(vector<int> A, int n, int val) {
// write code here
if(A.size()==0 || n<=0){
return -1;
}
int low,high,mid;
low = 0;
high = n-1;
while(low<=high){
mid = (low+high)/2;
if(A[mid] == val){
int i = mid-1;
while(i>=0 && A[i]==val){
i--;
}
return i+1;
}
else if(A[mid] > val){
high = mid - 1;
}
else if(A[mid] < val){
low = mid + 1;
}
}
return -1;
}
本文深入探讨了二分查找算法的两种实现方式:普通查找与查找首次出现位置。通过具体的代码示例,详细解析了算法的逻辑流程,适用于有序数组中目标值的高效查找。
28万+

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



