题目:有n+1个无序数字,取值范围1-n,找出唯一一个重复出现的数字。限制条件:可以用于加载数据的内存只有n/8字节。(n为整数)
思路:1+n个数,数的取值范围是从1到n的整数,其中只有一个数重复,说明有n个值,将所有数加和减去n*(n-1)/2即为重复的值。
代码
public int findRepeat(int[] a) {
int sum = 0;
for (int i = 0; i < a.length; i++) {
sum += a[i];
}
int nsum=(a.length-1) * (a.length)/2;
int s = sum - nsum;
return s;
}
或者用异或运算
网友评论