class Solution {
public:
int Begin(int *num,int n,int k) {
int i = 0, j = n - 1,mid;
while (i<=j){
mid = (j - i)/2 + i;
if (num[mid] == k) {
if (mid > 0 && num[mid - 1] == k) {
j = mid - 1;
}
else break;
}
else if (num[mid] < k) {
i = mid + 1;
}
else {
j = mid - 1;
}
}
return mid;
}
int End(int *num, int n,int k) {
int i = 0, j = n - 1, mid;
while (i<=j){
mid = (j-i) / 2 + i;
if (num[mid]==k) {
if (mid<(n-1)&&num[mid+1]==k) {
i = mid + 1;
}
else break;
}
else if (num[mid] < k) {
i = mid + 1;
}
else {
j = mid - 1;
}
}
return mid;
}
};
int main() {
Solution s;
int p[8] = {1,2,3,3,3,3,4,5};
int b = s.Begin(p,8,3);
int e = s.End(p,8,3);
cout << b << " " << e << endl;
return 0;
}
剑指offer53题目一
最新推荐文章于 2021-11-08 22:41:03 发布