思考
本来以为i有可能大于j,而j有可能小于i,但是我有详细的考虑下
发现这种写法最终i和j一定相等
样例
#include<iostream>
using namespace std;
const int N = 100010;
int a[N];
int n,q;
void er_fen(int k) {
int i = 0, j = n-1;
while (i<j) {
int mid = (i + j) / 2;
if (a[mid]<k) {
i = mid + 1;
}
else {
j = mid;
}
}
if (i == j && a[i] == k) {
cout << i << " " ;
i = 0, j = n - 1;
while (i < j) {
int mid = (i + j + 1) / 2;
if (a[mid] > k) {
j = mid - 1;
}
else {
i = mid;
}
}
cout << i <<endl;
}
else {
cout << -1 << " " << -1<<endl;
}
}
int main() {
cin >> n >> q;
for (int i = 0; i < n; i++) { cin >> a[i]; }
for (int i = 0; i < q; i++) {
int temp;
cin >> temp;
er_fen(temp);
}
return 0;
}
算法1
(暴力枚举) $O(n^2)$
blablabla
时间复杂度
参考文献
C++ 代码
blablabla
算法2
(暴力枚举) $O(n^2)$
blablabla
时间复杂度
参考文献
C++ 代码
blablabla