美文网首页
算法题:搜索两条单身狗

算法题:搜索两条单身狗

作者: 酷酷的哀殿 | 来源:发表于2016-10-13 14:59 被阅读222次

技术群里有人提出一个算法题:一个Int型数组,里面的每一个数都是成双成对的,只有一个数是单身狗,找出这个数,算法复杂度<= O(n)

思路很简单,通过异或运算就可以找到这个数。

下面,升级版的算法题来了。

一个Int型数组,里面的每一个数都是成双成对的,只有两个可怜的单身狗,找出这个两个数,时间复杂度<= O(n),空间复杂度 O(1)?
答案见下方。


·
·
·
·
·
·
·




线
·
·
·
·
·
·
·
·
·
·
·
·


bool FindDog() {

    int a=0;
    int b=0;

    const int length = 12;
    int arr[length] = {1,2,3,4,5,6,810,5,4,3,2,1};

    int aXORb =0;
    for (int i=0; i<length; i++) {
        aXORb ^= arr[i];
    }
    //查找两个单身狗的异或值,如果为0,则说明不存在两条单身狗。
    if( 0 == aXORb){
        printf("数据错误\n");
        return false;
    }

    //假设异或值为 0010100,则提取出 0000100

    int mask = 0x0;
    int flag = 0;
    while (flag < sizeof(int)) {
        mask = 0x1 << flag;
        int AB = aXORb & mask;
        if (AB>0) {
            break;
        } else {
            flag++;
        }
    }

    if( 0 == mask){
        printf("数据错误\n");
        return false;
    }

    //假设掩码为 0000100,则两个结果的右数第3不一致。
    //通过它,我们拆分数组为分别包含两个结果的数组(相同的数必定在同一数组,两个结果必定在不同数组),并分别求值

    for (int i=0; i<length; i++) {
        if (arr[i] & mask) {
            a ^= arr[i];
        }else{
            b ^= arr[i];
        }
    }
    printf("🐶 = %d \n",a);
    printf("🐶 = %d \n",b);
    
    return true;
}

相关文章

  • 算法题:搜索两条单身狗

    技术群里有人提出一个算法题:一个Int型数组,里面的每一个数都是成双成对的,只有一个数是单身狗,找出这个数,算法复...

  • 两条单身狗!

    要问我最鄙视谁,我第一个想到的就是班上的涛哥,因为他能贫、脸皮厚,关键是不要脸! 大一刚报道的时候,第一次见面,就...

  • CUIT MAGICIAN UNION 2017 TRAININ

    第一题 Expanding Rods POJ 1905 题解算法:二分搜索 第二题 Frogger POJ 22...

  • OGeek算法比赛总结

    赛题背景(说明)OGeek算法比赛:属于在实时搜索场景下搜索结果ctr预估流程:在用户在搜索框中输入搜索内容的同时...

  • 单身是狗还是贵族

    奇葩说的辩题:单身是狗还是贵族 挑选这个主题,是因为现阶段和我正好相符。看完这期节目,总结:所谓单身是狗还是贵族,...

  • LeetCode-79 单词搜索

    题目:79. 单词搜索 难度:中等 分类:数组 解决方案:DFS、回溯算法 今天我们学习第79题单词搜索,这个题目...

  • 自由的单身狗

    奇葩说第3季的第一个辩题,辩的是:单身是狗还是贵族。结果是,反方赢了,单身是狗。 这只是个辩论题,并不是拿单身来开...

  • Leetcode之653-两数之和IV-输入BST(Two Su

    前言 个人网站 公众号: 北京程序猿, 网站 : https://yaml.vip 算法题 题干 给定一个二叉搜索...

  • 2018-11-14

    昨天学习了模拟退火算法以及一个小智力题:海盗分赃~ 模拟退火算法前先看了爬山算法,爬山算法是一种简单的贪心搜索算法...

  • 【算法题】猫狗队列

    实现一种猫狗队列的结构,要求如下: 用户可以调用add方法将cat类或者dog类的实例放入队列中; 用户可以调用p...

网友评论

      本文标题:算法题:搜索两条单身狗

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