题目:给定两个整数集合,求两个集合的交集。
法一:排序法(先将集合排序,在找交集)
排序时间复杂度O(nlogn),对集合遍历查找O(n);总的时间复杂度O(nlogn);
void main()
{
int a[] = { 1, 5, 9, 8, 6, 4 };
int b[] = { 9, 4, 2, 0, 5, 11, 12 };
int alen = sizeof(a) / sizeof(int);
int blen = sizeof(b) / sizeof(int);
sort(a, a + alen);//排序
sort(b, b + blen);
vector<int> res; //保存结果
if (a[0] > b[blen - 1] || b[0] > a[alen - 1])
return;
int i = 0,j = 0;
while (i < alen &&j < blen) //查找
{
if (a[i]>b[j])
j++;
else if (a[i] < b[j])
i++;
else
{
res.push_back(a[i]);
cout << a[i] << " ";
i++; j++;
}
}
cout << endl;
}
法二:位图法(很巧妙啊)
时间复杂度:O(n) ,空间复杂度取决于最短数组的最大值和最小值差O((max-min)/32);