问题:
有一组数字,从1到n中减少了一个数,顺序也被打乱了,放在一个n-1的数组里,请找出丢失的数字。
分析:
这类题是频率很高的面试题,这类题的主要思路还是用XOR位操作,利用XOR位操作的原理是如果两个相同的数进行XOR操作,结果是0,而0与数A进行位操作,结果仍旧是A。所以,我们可以用1^2^...^n的结果逐个异或当前输入数据,而最后的结果是丢失的那个数字。时间复杂度为O(n),空间复杂度O(1)。
我们也可以用其它的方法,但是,相比起位操作,其它方法都有所缺陷,比如:
1. 用1+2+...+n(即n(n+1)/2)减去当前输入数据的总和。时间复杂度为O(n),空间复杂度O(1),缺点是容易溢出。缓解溢出的方法,求1+2+...+n的时候,边加边减。假如数组为a,那么这可以这么计算1-a[0]+2-a[1]+...+(n-1)-a[n-2]+n。
2. 用1*2*...*n除以当前输入的数据的积。时间复杂度O(