①n-1个整数,并未排序,元素师1~n中不同整数 如何寻找序列中缺少的整数?请写一个线性的算法。
思想:
首先,求得所有元素的和SUM,T=O(n)
再计算N个数的和为n(n+1)/2
所以缺少的整数为: n(n+1)/2 - SUM
②n+1个整数,并未排序,元素师1~n中不同整数 如何寻找序列中唯一重复的数?
解法一:类似于上面的求和解法,SUM - n(n+1)/2
解法二:异或法:
for(int i :0->n)
{
tmp =0^a[i]; //因为j^j=0,所以这步骤是消除了重复的数
tmp^=i; //把所有tmp的N个数异或,只有重复的数没被异或掉
}
解法三:位图(略)
解法四:hash
解法五:将数组改写成链表,然后类似于单链表找环,设置两个指针,一快一慢(快:f=p->next->next;慢:s= p-next;),去找环的点(即重复的数)