算法实现:在一组数据中查找相同的数据,并将相同的数据放在一块儿

chmj1222 2009-05-21 01:41:39
比如:我有这样一组数据,n1,n2,n3,n4,n5,n6,n7,n8,n9,一共十个数据,我想通过一个算法将这组数据中相等的数据找出来,并放在一起,例如,若n1=n4=1,n5=n9=8我希望可以这样存放这两个相等的数据,{n1=1,n4=1},{n5=8,n9=8};
若有100个数据呢?
各位有没有比较简单有效的算法,我自己弄了一个,复杂度太大了,不好~!谢谢大家哈~!
...全文
579 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
crst_zh 2009-05-27
  • 打赏
  • 举报
回复
直接用mutimap做吧,放进去自然就有序了,相邻的也在一起。
lhy 2009-05-27
  • 打赏
  • 举报
回复
附议hash
小魔菇 2009-05-27
  • 打赏
  • 举报
回复
用hash吧
jiyan1221 2009-05-27
  • 打赏
  • 举报
回复
先排序,后分组。。。。
djj2007 2009-05-26
  • 打赏
  • 举报
回复
排序,相同的值就会在一起了,遍历下就行了
基于比较的排序的话o(nlogn)
不基于比较的话 o(n)
leegongbo 2009-05-26
  • 打赏
  • 举报
回复
hash表不知道可不可以。
设计hash函数。有相同的hash值的在一起。相同的数的hash值肯定相等
一次遍历就可以把相等的数归到一块。O(n)复杂。
然后在相同的hash链表中找相等的。这时可以选择排序
sam_pei 2009-05-22
  • 打赏
  • 举报
回复
排序吧
huizhouxueyuan 2009-05-22
  • 打赏
  • 举报
回复
给你个思路: 建立一个 multimap, 元素为 <元素值,元素位置> 这样的pair



#include<iostream>
#include<vector>
#include<map>
#include<set>
using namespace std;

int main()
{
vector<int> yourArrays;
yourArrays.push_back(1);
yourArrays.push_back(3);
yourArrays.push_back(5);
yourArrays.push_back(9);
yourArrays.push_back(3);
yourArrays.push_back(8);
yourArrays.push_back(5);
yourArrays.push_back(9);
yourArrays.push_back(1);
yourArrays.push_back(1);
yourArrays.push_back(3);
multimap<int, int> words;
set<int> value;
for(int i = 0; i < yourArrays.size(); ++i)
{
value.insert(yourArrays[i]);
words.insert(make_pair(yourArrays[i], i));
}
for(set<int>::iterator pos = value.begin(); pos != value.end(); ++pos)
{
for(multimap<int, int>::iterator mpos = words.lower_bound(*pos); mpos != words.upper_bound(*pos); ++mpos)
{
cout << "yourArrays[" << mpos->second << "] = " ;
}
cout << *pos << endl;
}
cout << endl;

return 0;

}
光宇广贞 2009-05-22
  • 打赏
  • 举报
回复
代码没有,思路有。

对于统计重复数据的情况。

若是全整型值的话,使用“基数统计”法,统计的过程中记录下节点位置,然后就可以根据统计情况得出你所要的元包组。

复杂度是线性的。

关于“基数统计”是“基数排序”思想的,相关的你去查一查。
pathuang68 2009-05-22
  • 打赏
  • 举报
回复
排序
cyldf 2009-05-21
  • 打赏
  • 举报
回复
嗯,先排序,然后O(n)就能取出相同数据。
ltc_mouse 2009-05-21
  • 打赏
  • 举报
回复
可否考虑先排序? 然后遍历一次即可分组...
mengde007 2009-05-21
  • 打赏
  • 举报
回复
可以写一个树型结构;插入之,判断;
lingyin55 2009-05-21
  • 打赏
  • 举报
回复
chmj1222 2009-05-21
  • 打赏
  • 举报
回复
希望能给出好的思路和关键的代码~! 谢谢~!

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧