原题: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的和减去数组中所有元素的和嘛!
朋友是搞开发的,埋头想了半天,也没什么简单的算法;
刚上中学的表弟见了,撇撇嘴,说:不就是1~100的和减去数组中所有元素的和嘛!