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

本文介绍了一种在整数数组中快速找到唯一出现奇数次的元素的方法。该方法使用XOR位操作,在O(n)时间内完成,且仅需常量空间。文章还对比了其他几种解决方案,并详细解释了XOR方法的原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文地址: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 times

class 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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值