怎样判断一个数组(无序)中是否有相同的元素呢?

AAA20090987 2009-09-14 12:08:04
如题:

除了先将该数组排序以外,还有另外的(效率尽量高一点)算法吗?
...全文
1314 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
gcc_gun 2009-09-14
  • 打赏
  • 举报
回复
补充2楼的:1、在遍历时,数组中数为i时,b[i]++
2、在b[i]++后判断其是否>1,而不用全部遍历完。
hoomey 2009-09-14
  • 打赏
  • 举报
回复
楼上的方法不错
liao05050075 2009-09-14
  • 打赏
  • 举报
回复
用排序的效率O(nlog(n))
使用Hash的效率是O(n),具体是:
开个数组b[maxValue],开始全部为0.
然后数组中有i这个数,就把b[i]设为1,于是,遍历一次数组就可以得到结果了
aopha 2009-09-14
  • 打赏
  • 举报
回复
遍历检查...
AAA20090987 2009-09-14
  • 打赏
  • 举报
回复
学习了,
谢谢各位啊。
shiweifu 2009-09-14
  • 打赏
  • 举报
回复
学习了~~~
liao05050075 2009-09-14
  • 打赏
  • 举报
回复
其实还有一种选择,那就是用二叉搜索树或者红黑树,虽说效率也是O(nlogn)的,但实际上效果应该会比直接排序来得好些。
如果懒得写二叉搜索树或者红黑树,那就用C++ STL的set容器吧。
  • 打赏
  • 举报
回复
位图或者hash.
如果空间消耗太大,可以考虑适当排序。
whg01 2009-09-14
  • 打赏
  • 举报
回复
基本方法就是排序、位图这两种方法。但如果数据有特点的话,也许可以做优化。
herman~~ 2009-09-14
  • 打赏
  • 举报
回复
mark
建议使用数组标识的方法 牺牲一点空间来提高效率
mstlq 2009-09-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 aaa20090987 的回复:]
引用 2 楼 liao05050075 的回复:
用排序的效率O(nlog(n))
使用Hash的效率是O(n),具体是:
开个数组b[maxValue],开始全部为0.
然后数组中有i这个数,就把b[i]设为1,于是,遍历一次数组就可以得到结果了


这个方法挺好的,但消耗的内存好大啊,特别是maxValue是几十万或几千万的时候。
[/Quote]

使用unsigned char数组,一个char有8bit,每bit代表一个数是否存在……
最大1亿的话,所耗内存也不过12.5m……
AAA20090987 2009-09-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 liao05050075 的回复:]
用排序的效率O(nlog(n))
使用Hash的效率是O(n),具体是:
开个数组b[maxValue],开始全部为0.
然后数组中有i这个数,就把b[i]设为1,于是,遍历一次数组就可以得到结果了
[/Quote]

这个方法挺好的,但消耗的内存好大啊,特别是maxValue是几十万或几千万的时候。
mstlq 2009-09-14
  • 打赏
  • 举报
回复
如2楼所说,用位图^_^

64,640

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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