题目:A、B两个整数集合,设计一个算法求它们的交集,尽可能的高效。
解题思路:(1)开始想到的是先将两个集合排序,然后利用两个指针指向两个集合,进行数值是否相等的判断,另指针继续遍历,代码如下:
#include <iostream>
using namespace std;
#define M 7
#define N 6
int comp(const void* a, const void* b){
return *(int*)a - *(int*)b;
}
int main(){
int A[] = {-53, 244, 6, 79, 14, 0, 300};
int B[] = {-78, 0, 14, 56, -53, 489};
qsort(A, M, sizeof(int), comp);
qsort(B, N, sizeof(int), comp);
int result[M>N?M:N];
int pointer = 0;
int i=0,j=0;
while(i < M && j <N){
if (A[i] == B[j]){
result[pointer] = A[i];
i++;
j++;
pointer++;
}
else if(A[i] < B[j]){
i++;
}
else{
j++;
}
}
for (int k = 0; k < pointer; k++){
cout << result[k] << " ";
}
cout << endl;
system("pause");
return 0;
}
思路(2):思路一的时间复杂度为O(n*n),肯定不满足题目要求,