【刷题之路】寻找奇数次出现的数2

原创 2016年06月01日 21:28:31

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

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

与之前不同,这次单数次出现数字为两个,仍然使用位运算,但是因为有两个数,全部异或的结果就是两个单数次异或的结果。比较朴素的想法是将数组分为两组,这样就与之前的问题一致了。

class OddAppearance {
public:
    vector<int> findOdds(vector<int> arr, int n) {
        // write code here
        int temp=0,tmp=0,i,k;
        vector<int> res;
        for(i=0;i<n;i++){
            temp^=arr[i];
        }
        for(i=0;i<sizeof(int)*8;i++){
            k=1<<i;
            if(temp&k) break; //寻找两个数异或之后某一位为1,则这两个数在这一位肯定是不同的,以这个为基准,就可以将数组一分为二
        }
        for(i=0;i<n;i++){
            if(arr[i]&k) tmp^=arr[i]; //将该位值为1的所有数异或,剩下的一定是其中一个单数次出现的值
        }
        temp=temp^tmp; //再次异或,剩下的就是另外一个数字
        if(temp>tmp){
            res.push_back(tmp);
            res.push_back(temp);
        }
        else{
            res.push_back(temp);
            res.push_back(tmp);
        }
        return res;
    }
};

版权声明:本文为博主原创文章,未经博主允许不得转载。

POJ 1338 Ugly Numbers(我的水题之路——丑数2,3,5,质因子组成数)

Ugly Numbers Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 15393   ...

在其它数都出现偶数次的数组中寻找出现奇数次的数

通过位运算,寻找出现出现奇数次的数

算法习题64:寻找丑数2 3 5的倍数

题目:我们把只包含因子 2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第1500个丑数。...
  • ylf13
  • ylf13
  • 2013年11月15日 11:42
  • 637

剑指offer刷题之c++实现的调整数组顺序使奇数位于偶数前面

#include "myHead.h" /** 调整数组顺序,使得奇数全部放左边,偶数全部放右边,不考虑原来数组中的奇(偶)数之间相对顺序 */ int condition(int x); v...

牛客网刷题之调整数组顺序使奇数位于偶数前面

题目描述:解题思路:  如果是强解的话,就可以从头扫描这个数组,每碰到一个偶数时,拿出这个数字,并把位于这个数字后面的所有数字都往前挪动一位,这种解法显然是O(n^2)的,不用想都知道,这不可能通过测...

异或(^)的妙用——求一组数据中唯一一个出现奇数次的数!

在C语言中,“^”是一个双目运算符,用于完成两个数据的按位异或操作。 例如: 5^4 (00000101)^(00000100)=(00000001)=1 ...

找出数组中出现奇数次的元素

题目:给定一个含有n个元素的整型数组array,其中只有一个元素出现奇数次,找出这个元素。 分析:因为对于任意一个数 k,k^k = 0,k^0 = k,所以将array中所有元素进行异或,那么个数...

程序员面试题目总结--数组(五)【数组的后面m个数移动为前面m个数、列的前n项数据、判断整数x是否可以表示成n个连续正整数的和、数组中出现奇数次的元素、二维数组中的查找】

21、将数组的后面m个数移动为前面m个数 题目:

学习笔记——利用位运算求数组中只出现一次或奇数次的数字

2013.10.24 早上 问题:利用位运算求数组中只出现一次或奇数次的数字 问题描述: 该问题是我在网易博主何海涛的博文上转载而来,分析部分源自作者的博文用于学习,代码部分是我本人参照是实现的...
  • xhrno13
  • xhrno13
  • 2013年10月24日 12:17
  • 492

【面试题】数组中有两个元素出现了奇数次,其他元素出现了偶数次。找出这两个元素

数组中有两个元素出现了奇数次,其他元素出现了偶数次。找出这两个元素。 把原数组分为两个子数组。在每个子数组中,包含一个只出现一次的数字,而其他数字都出现两次。如果能够这样拆分原数组,按照前面的办法就...
  • bxyill
  • bxyill
  • 2013年03月09日 09:14
  • 2702
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【刷题之路】寻找奇数次出现的数2
举报原因:
原因补充:

(最多只允许输入30个字)