算法

算法3 找重复

2017-09-06  本文已影响0人  holmes000

题目:有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;
}

或者用异或运算

上一篇下一篇

猜你喜欢

热点阅读