C++-求N个有序数组的公共元素

发布于 2016-12-10 09:30:17 字数 64 浏览 1549 评论 1

具体可以以N个增序的int类型vector为例,求N个vector的公共元素,没有的话输出无。要求时间复杂度尽量低

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

泛泛之交 2017-07-17 17:42:06

这是一个NP问题,给出一个解法

#include<iostream>
#include<vector>
using namespace std;
int main()
{
int arr[12]={1,2,3,4,4,5,6,7,3,4,5,6};
vector<int> v1(arr,arr+4),v2(arr+4,arr+8),v3(arr+8,arr+12);
vector<vector<int>*> vs;
vs.push_back(&v2);
vs.push_back(&v3);
vector<int> vshare(v1.begin(),v1.end());
for(int i=0;i<(int)vs.size()&&!vshare.empty();++i)
{
vector<int> *v=vs[i];
/*int a=vshare.front();
int b=v->back();
int c=vshare.back();
int d=v->front();*/
if(vshare.front()>v->back()||vshare.back()<v->front())
{
vshare.clear();
continue;
}
vector<int>::iterator it1=vshare.begin();
vector<int>::iterator it2=v->begin();
while(it1!=vshare.end()&&it2!=v->end())
{
if(*it1<*it2)
it1=vshare.erase(it1);
else if(*it1>*it2)
++it2;
else
{
++it1;
++it2;
}
}
}
if(vshare.empty())
cout<<"没有共同元素"<<endl;
else
{ cout<<"共同元素为 ";
for(int i=0;i<vshare.size();++i)
cout<<vshare[i]<<" ";
cout<<endl;
}
system("pause");
return 0;
}

算法复杂度为O(NM),N为vector数目,M为vector平均长度。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文