每日一道算法题:两个数组的交集

来源:互联网 发布:捕鱼游戏机核心算法 编辑:程序博客网 时间:2024/06/05 10:55

题目:A、B两个整数集合,设计一个算法求它们的交集,尽可能的高效。

解题思路:(1)开始想到的是先将两个集合排序,然后利用两个指针指向两个集合,进行数值是否相等的判断,另指针继续遍历,代码如下:

#include <iostream>using namespace std;#define M 7#define N 6int 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),肯定不满足题目要求,

0 0
原创粉丝点击