如何找出数组中出现奇数次的元素
2014-03-09 23:11
447 查看
给定一个含有n个元素的整型数组array,其中只有一个元素出现奇数次,找出这个元素。
思路分析:
这道题一般人的第一反应都是遍历数组,将数组中每个元素出现的次数保存下来,然后遍历这些次数,返回奇数者。时间复杂度O(n2),累不累啊。因为对于任意一个数k,有k^k=0,k^0=k,所以将array中所有元素进行异或,那么个数为偶数的元素异或后都变成了0,只留下了个数为奇数的那个元素。酱紫的话时间复杂度只有O(n),多省事啊。
程序示例如下:
效果如图:
思路分析:
这道题一般人的第一反应都是遍历数组,将数组中每个元素出现的次数保存下来,然后遍历这些次数,返回奇数者。时间复杂度O(n2),累不累啊。因为对于任意一个数k,有k^k=0,k^0=k,所以将array中所有元素进行异或,那么个数为偶数的元素异或后都变成了0,只留下了个数为奇数的那个元素。酱紫的话时间复杂度只有O(n),多省事啊。
程序示例如下:
#include "stdafx.h" #include <stdio.h> int FindElementWithOddCount(int* a, int n) { int r = a[0]; for (int i = 1; i < n; ++i) { r ^= a[i]; } return r; } int main() { int array[] = { 1, 2, 2, 3, 3, 4, 1 }; int len = sizeof(array) / sizeof(array[0]); printf("%d\n", FindElementWithOddCount(array, len)); getchar(); return 0; }
效果如图:
相关文章推荐
- 如何找出数组中出现次数为奇数次的唯一元素
- 由n个元素组成的数组,n-2个数出现了偶数次,两个数出现了奇数次,且这两个数不相等,如何用O(1)的空间复杂度,找出这两个数
- 找出数组中出现奇数次的元素
- [原]找出数组中出现奇数次的元素<异或的应用>
- 找出数组中出现奇数次的元素<异或的应用>
- 找出数组中出现奇数次的元素
- 找出数组中出现奇数次的元素
- 如何快速找出一个数组中只出现一次的两个数,其他元素出现两次?保证时间复杂度O(n),空间复杂度O(1)
- 【面试题】数组中有两个元素出现了奇数次,其他元素出现了偶数次。找出这两个元素
- indexOf() 如何判断一个元素在指定数组中是否存在? 找出指定元素出现的所有位置? indexOf()方法 是正序查找,lastIndexOf()是倒叙查找
- 找出数组中出现奇数次的元素
- 整数数组中,每个元素均出现两次,除了一个元素例外,如何找出这个元素?能否设计一个线性时间的算法,且不需要额外的存储空间?
- 找出数组中出现奇数次的元素<异或的应用>
- 找出一个整形数组的所有元素除了一个、两个、三个元素外,其余全是成对出现的,找出这些元素
- [面试题] 已知比例,找出数组中出现较多的元素
- java 找出n个元素数组中重复次数最多的数(假设出现次数大于n/2)
- 一个数组有除了两个元素只出现一次,其他元素全部都出现了两次,请找出只出现一次的两个元素,并输出
- Java实现 找出数组中出现次数超过数组长度一半的元素
- 基础算法----找出集合中最大和值的子数组,插入排序,找出数组中出现最多的元素
- 互联网面试题:一个数组中找出三个出现奇数次的数字中的一个