美文网首页
8_6寻找奇数出现2

8_6寻找奇数出现2

作者: X_Y | 来源:发表于2017-10-23 21:27 被阅读13次

给定一个整型数组arr,其中有两个数出现了奇数次,其他的数都出现了偶数次,找到这两个数。要求时间复杂度为O(N),额外空间复杂度为O(1)。

给定一个整形数组arr及它的大小n,请返回一个数组,其中两个元素为两个出现了奇数次的元素,请将他们按从小到大排列。

测试样例:
[1,2,4,4,2,1,3,5],8
返回:[3,5]

class OddAppearance {
    public:
        vector<int> findOdds(vector<int> arr, int n) {
            // write code here
            int diff = arr[0];        
            for(int i=1; i<n; ++i){
                diff ^= arr[i];
            }
            int tmp = diff, num = 0;
            while(tmp != 0){
                if(1 == (tmp & 1)) break;
                tmp >>= 1;
                ++num;
            }
            int a = 0;
            for(int i=0; i<n; ++i){
                if(((arr[i]>>num) & 1) == 1){
                    a ^= arr[i];
                }
            }
            int b = a^diff;
            vector<int> res(2, 0);
            if(a<b){
                res[0] = a;
                res[1] = b;
            }else{
                res[0] = b;
                res[1] = a;
            }
            return res;
        }
};

相关文章

  • 8_6寻找奇数出现2

    给定一个整型数组arr,其中有两个数出现了奇数次,其他的数都出现了偶数次,找到这两个数。要求时间复杂度为O(N),...

  • 8_5寻找奇数出现

    有一个整型数组A,其中只有一个数出现了奇数次,其他的数都出现了偶数次,请打印这个数。要求时间复杂度为O(N),额外...

  • 奇数和偶数的秘密(小学数学)

    1.任意两个奇数的和(或差),一定是偶数。 奇数+奇数=偶数 奇数–奇数=偶数 2.任意两个奇数的积,一定是奇数。...

  • PTA 7-2 找奇葩 (20 分)

    题目 在一个长度为 n 的正整数序列中,所有的奇数都出现了偶数次,只有一个奇葩奇数出现了奇数次。你的任务就是找出这...

  • translate 出现字体模糊情况

    translate2d出现模糊的原因是因为元素的高度、宽度中有奇数, 使用translate(-50%,-50%)...

  • Java-最长回文串

    如果某个字母是偶数,直接加上该字母出现的次数。如果是奇数,加上该字母出现的次数减1。如果出现了奇数,总数加1。

  • 勾股数---偶数

    奇数 在上节课中,我们了解了奇数的证明勾股数的证明方法: 当a为大于1的奇数2n+1时,b=2n^2+2n, c=...

  • 在数组中出现奇数次的数

    在数组中出现奇数次的数 N个数组元素,每个数组元素的出现,如果出现计数为1,如果出现2次,或者以上就显示出来 例如...

  • 查找数组中惟一出现奇数次的数

    问题描述 数组中只有一个数出现了奇数次,其它数都出现了偶数次,找到这个出现了奇数次的数 解决方法 方法1:循坏遍历...

  • 生成每种字符都是奇数个的字符串

    题目: 题目的理解: 将整数分解成奇数。(1)如果n是偶数,一个偶数分成2个奇数。(2)如果n是奇数,则减1后变成...

网友评论

      本文标题:8_6寻找奇数出现2

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