找回密码
 欢迎注册
查看: 22410|回复: 29

[擂台] 快速找出奇数次数的数

[复制链接]
发表于 2009-9-28 09:03:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
为活跃气氛,给大家出一道比较简单的算法题。欢迎大家也来出一些小巧的算法题。

古有云:数有奇偶,奇数为阳,偶数为阴。
今天我们要说的不是数的奇偶,而是数字重复次数的奇偶。

说的是:
有一个由很多整数构成的数组,但其元素多有重复,重复次数不尽相同。
比较奇特的是,重复次数最多的为一个奇数,其余的次数均为偶数(零恰巧也属于偶数之列)。
现在,请设计一个尽可能快的算法,找出这个出现奇数次的整数。

比如:1、4、5、4、5、4、5、5、4、1、4,结果应为“4”

上述题目中有些信息是冗余的,如果点破了则显得非常简单。
确信得到答案者最好将回帖设置成“回复可见”,以便给其他网友留有思考空间。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-9-28 10:01:20 | 显示全部楼层
一个实际应用:
      有很多服务器存储数据,假设一个机器仅存储一个标号为ID的记录,假设机器总量在10亿以下且ID是小于10亿的整数,假设每份数据保存两个备份,这样就有两个机器存储了同样的数据。

问题是:1.假设在某个时间得到一个数据文件ID的列表,是否能快速地找出表中仅出现一次的ID?

          即快速找出出现故障的机器存储的数据ID。

        2.如果有两台机器出现故障呢?(假设存储同一份数据的两台机器不会同时出现故障,

          即列表中缺少的是两个不等的ID)
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-9-28 10:43:43 | 显示全部楼层
还真想不出什么快速的方法,再怎么说也要遍历一遍吧。一个变量记录最大值,初始化为0,建一个大数组,初始化为0,将遍历到的数值作为下标,遍历一个,相应的数组项加1,同时和最大值比较,记录。最后就得到了。当然,建的大数组可能会巨型了,呵呵。实际中,用STL的map也许是个办法。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-9-28 10:49:24 | 显示全部楼层
上面的算法时间和空间耗费都太大,不适合。

可以有一个算法,额外只用极小的空间,遍历一遍即可得到结果,大家再想想。。。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-9-28 11:03:40 | 显示全部楼层
本帖最后由 wayne 于 2009-9-28 11:04 编辑

就那一个数是奇数次吗,
是不是遍历求和做标记来判断奇偶
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-9-28 11:11:22 | 显示全部楼层
游客,如果您要查看本帖隐藏内容请回复

评分

参与人数 1威望 +2 收起 理由
gxqcn + 2 正解

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-9-28 11:23:08 | 显示全部楼层
虽说2楼给出了实际应用,
但我总感觉这题挺怪异的,
看来我根本就是不在行啊,
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-9-28 11:36:29 | 显示全部楼层
其实你很厉害的。

怪我故意在题目中新增了一些无用的干扰信息,让人抓不住重点。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-9-28 11:54:36 | 显示全部楼层
快速找出数组中唯一一个出现奇数次的数!其他的都是干扰信息。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-9-28 12:30:54 | 显示全部楼层
其实,我在帖子题目里已把重点给突出来了。
ls 肯定早就知晓答案了。

请问:2# 的第2问解决方法是否与第1问类似?可有关联?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-4-24 09:37 , Processed in 0.046535 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表