#include
using namespace std;
int n,m;
int a[10001], b[10001];
int l = 0, r = m - 1, mid = (l + r)/2;
bool binary(int x) {
while(l < r && b[mid] != x) {
if(b[mid] < x) {
l++;
mid = (l + r)/2;
}
else {
r--;
mid = (l + r)/2;
}
}
if(b[mid] == x) return 1;
else return 0;
}
int main() {
cin >> n >> m;
for(int i = 0;i < n;i++) scanf("%d",&a[i]);
for(int i = 0;i < m;i++) scanf("%d",&b[i]);
sort(b + 0,b + m);
for(int i = 0;i < n;i++) if( binary(a[i]) ) printf("%d ",a[i]);
return 0;
}
每次调用二分查找时,l和r应该重新赋值为0和m-1,所以应该定义到函数里面去
#include <algorithm>
#include <cstring>
#include <iostream>
using namespace std;
int n, m;
int a[10001], b[10001];
bool binary(int x) {
int l = 0, r = m - 1, mid = (l + r) / 2;
while (l < r && b[mid] != x) {
if (b[mid] < x) {
l++;
mid = (l + r) / 2;
} else {
r--;
mid = (l + r) / 2;
}
}
if (b[mid] == x)
return 1;
else
return 0;
}
int main() {
cin >> n >> m;
for (int i = 0; i < n; i++) scanf("%d", &a[i]);
for (int i = 0; i < m; i++) scanf("%d", &b[i]);
sort(b + 0, b + m);
for (int i = 0; i < n; i++)
if (binary(a[i])) printf("%d ", a[i]);
return 0;
}
l,r初始化不对。n和m还没输入呢