gweber

每一缕清新的阳光都值得珍惜,每一首歌都有最美丽的旋律,每一个生命都应该受到尊重。

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

原题:1~100共一百个自然数,放入一个99个元素的数组a[99],要求写出一个尽量
简单的方案,找出没有被放入数组的这个数

讨论:

呵呵,
拿到题后,第一种解法,做一个2重循环,那么,复杂度就是n*n,肯定不能过关;
想到的第二种解法是利用一个辅助数组b(100),循环原数组一遍,对b赋值(b[a[i]] = 1),那么,b中不是1的元素的下标(位置)就是需要找的数字:
for( i=1; i<=99, i++)
b[a[i]] = 1;
for( i=1; i<=100; i++)
if(b[i]) != 1)
return i;
平均复杂度为n+n/2, 如果是C语言,初始化b数组需要n次赋值,复杂度为2n+n/2.

使用数学方法,确实没有想到,呵呵...

----------------

关于笔试题的评论

一次和朋友闲聊的时候说起这道题,
朋友是搞开发的,埋头想了半天,也没什么简单的算法;
刚上中学的表弟见了,撇撇嘴,说:不就是1~100的和减去数组中所有元素的和嘛!
posted on 2005-06-21 20:01  Gweber.NET  阅读(2084)  评论(5编辑  收藏  举报