美文网首页程序员
很久以前的一个题目

很久以前的一个题目

作者: Kent_Zhang | 来源:发表于2016-02-25 01:06 被阅读123次

    突然发现以前回答过的网上的一个题目,
    1 有一个数组,假如有一百万个数据,其中有一个的值与其他的不同。如何在最短时间内将这个数据找出来要求:不要开辟新的使用空间,如使用哈希表,不要使用判断语句,如if

    现在想了下居然有和以前不同的思路。
    稍微描述下。
    我理解题意为有100万个int型,其中99…………个相同值,一个不同值。
    把100万个数字的最低位bit相加,得到一个数,这个数-1取非,即是不同值的最低位。
    其他位,依次如上处理。即可。
    按这尿性算法复杂度是O(n),有时间再想想有没有优化的算法了。

    伪代码如下:
    int unique_value(int data[]) {
    int value = 0;
    unsigned long long bit = 0;
    // 32位循环处理32次
    for(int i = 0; i < 32; i++) {
    for(int j = 0; j < 100W; j++) {
    // 统计位上1的数量
    bit += data[j] & (1 << i) >> i;
    }
    // 算出不同值对应位上是还是0
    value |= !(bit - 1) << i;
    }
    // 返回不同值
    return value;
    }

    代码没变异也没跑过,不知道对不对…………

    相关文章

      网友评论

        本文标题:很久以前的一个题目

        本文链接:https://www.haomeiwen.com/subject/supikttx.html