免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4024 | 回复: 9
打印 上一主题 下一主题

[算法] 遇一算法难题,求救(已解决)哈 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-09-18 09:41 |只看该作者 |倒序浏览
数组a[N],存放了1到N-1,其中某个数重复一次。写一个函数,找出被重复的数字.
时间复杂度必须为o(N)函数原型:
int do_dup(int a[],int N)

例如:n=3,
a[3] ={1,2,2}
找出哪个数重复了

[ 本帖最后由 1980116 于 2007-9-18 19:27 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-09-18 09:45 |只看该作者
楼主说错了吧,o(N) 复杂度,只需要遍历数组,比较就可以了。

论坛徽章:
0
3 [报告]
发表于 2007-09-18 09:50 |只看该作者
O(N)的复杂度,用另外一个数组就行了,可能也用不着遍历,只要碰到有重的就可以停止了

论坛徽章:
0
4 [报告]
发表于 2007-09-18 09:54 |只看该作者
原帖由 1980116 于 2007-9-18 09:41 发表
数组a[N],存放了1至N-1个数,其中某个数重复一次。写一个函数,找出被重复的数字.
时间复杂度必须为o(N)函数原型:
int do_dup(int a[],int N)

已知数组大小为N,可以得到常数 M=1+2+3+...+(N-2)+(N-1)
把数组a中的N个元素值相加再减去M即可得到重复的数字。
算法复杂度为o(N)

论坛徽章:
0
5 [报告]
发表于 2007-09-18 09:59 |只看该作者
原帖由 jaffaz 于 2007-9-18 09:54 发表

已知数组大小为N,可以得到常数 M=1+2+3+...+(N-2)+(N-1)
把数组a中的N个元素值相加再减去M即可得到重复的数字。
算法复杂度为o(N)

高明啊,想了好长时间没有答出来,太厉害了,谢谢你

论坛徽章:
0
6 [报告]
发表于 2007-09-18 10:13 |只看该作者
x = N - Sum(1~N) + Sum of the array[N];

论坛徽章:
0
7 [报告]
发表于 2007-09-18 10:26 |只看该作者
4楼和6楼的方法正确吗???
1,2,3

a[N]=2, 3, 3

4楼:
M=1+2=3
a[N]: 2+3+3=8



6楼:
N:3
Sum(1~N):1+2+3=6
Sum of the array[N]:2+3+3=8
3-6+8=5

论坛徽章:
0
8 [报告]
发表于 2007-09-18 11:02 |只看该作者

回复 #7 ypxing 的帖子

数组a[N],存放了1至N-1个数
所以3不可能出现在array里面。ARRAY里面最大允许的数字是2。

论坛徽章:
0
9 [报告]
发表于 2007-09-18 13:20 |只看该作者
楼主的描述实在是有问题,大多数人都会理解错的。
zhangzhangg 该用户已被删除
10 [报告]
发表于 2007-09-18 13:45 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP