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

来源:互联网 发布:linux oracle rpm安装 编辑:程序博客网 时间:2024/05/22 00:50

原文地址:Find the Number Occurring Odd Number of Times

已知一个整数数组,除了一个元素只出现了奇数次,其他元素均出现偶数次。在O(n)的时间与常量空间范围内找出这个数字。

例如
I/P = [1, 2, 3, 2, 3, 1, 3]
O/P = 3

一个简单地办法就是两层循环。外部循环逐一选择元素,内部循环计数被选择的元素出现的次数。这个方法的实践复杂度是O(n2)

更好一点的方法用哈希法。利用数组元素作为key,元素出现的次数作为value。建立一个空的哈希表,逐一遍历已知数组中的元素,并保存出现的次数。这个方法的实践复杂度是O(n),但是它需要额外的空间用于哈希。

最好的方法就是用XOR对所有的元素作位操作。所以元素做XOR操作可以得到出现奇数次的元素。请注意如果两个元素相同,那么这两个元素的XOR的结果是0,x与0的XOR的结果是x。

下面就是最佳方法的实现:

//Java program to find the element occurring odd number of timesclass OddOccurance {    int getOddOccurrence(int ar[], int ar_size)     {        int i;        int res = 0;        for (i = 0; i < ar_size; i++)         {            res = res ^ ar[i];        }        return res;    }    public static void main(String[] args)     {        OddOccurance occur = new OddOccurance();        int ar[] = new int[]{2, 3, 5, 4, 5, 2, 4, 3, 5, 2, 4, 4, 2};        int n = ar.length;        System.out.println(occur.getOddOccurrence(ar, n));    }}

输出:

5

时间复杂度:O(n)

0 0
原创粉丝点击