在数组中查找出现奇数次的元素
来源:互联网 发布: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
一个简单地办法就是两层循环。外部循环逐一选择元素,内部循环计数被选择的元素出现的次数。这个方法的实践复杂度是
更好一点的方法用哈希法。利用数组元素作为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
- 在数组中查找出现奇数次的元素
- 找出数组中出现奇数次的元素
- 找出数组中出现奇数次的元素
- 找出数组中出现奇数次的元素
- 查找数组中惟一出现奇数次的数
- 找数组中奇数次的元素
- 在其它数都出现偶数次的数组中寻找出现奇数次的数
- 在其他数都出现偶数次的数组中找到出现奇数次的数
- 找出数组中出现奇数次的元素<异或的应用>
- 如何找出数组中出现次数为奇数次的唯一元素
- java算法6~在其他数都出现偶数次的数组中找到出现奇数次的数
- 位运算---在其他数都出现偶数次的数组中找到出现奇数次的数
- 找一个数组中出现奇数次的那个数
- 输出数组中奇数次出现的数
- 在N个数中找出出现奇数次的数
- 查找数组中重复出现的元素
- 【面试题】数组中有两个元素出现了奇数次,其他元素出现了偶数次。找出这两个元素
- 如何在无序数组中寻找两个出现奇数次整数
- APK ROM 签名原理
- Mybatis 的Log4j日志输出问题 - 以及有关日志的所有问题
- 记录学习的点滴(树形结构数据SQL检索语句)
- Prism4文档翻译(第一章 第五部分)
- python直方图均衡化直观理解
- 在数组中查找出现奇数次的元素
- linux c tool系列------getevent.c
- 【linux】RPM
- 南邮数据结构实验四----各种内排序算法的实现及性能比较
- 搭建IntelliJ IDEA+maven+jetty+SpringMVC 开发环境(二)
- 基于Dubbo协议的项目示例及详细讲解(二)
- GCC 升级4.8 支持c++11
- IO多路复用之epoll
- 列表,元组里面常用的几种函数以及方法