找出N个数字中唯一出现奇数次的数 解题报告
2011-10-26 22:10
281 查看
Description
现在有n个数,只有一个数出现奇数次,把它找出来。
Input
首先一个T表示有T组数据。
每组数据一个n表示有(n<=100000)个数。
接下来n个数字a0,a1……an-1( ai在int型范围内)。
Output
输出那个出现奇数次的数。
Sample Input
2
3
2 2 100000000
5
1 2 2 2 2
Sample Output
100000000
1
分析:由于数据量比较大,不适合建立大的hash表来统计数据。相反利用异或运算的性质,
1)可交换性 A XOR B XOR A = (A XOR A) XOR B
2) 奇数次异或结果为本身,偶数次异或结果为0。 A XOR A =0 , 0 XOR A =A
直接计算。
View Code
现在有n个数,只有一个数出现奇数次,把它找出来。
Input
首先一个T表示有T组数据。
每组数据一个n表示有(n<=100000)个数。
接下来n个数字a0,a1……an-1( ai在int型范围内)。
Output
输出那个出现奇数次的数。
Sample Input
2
3
2 2 100000000
5
1 2 2 2 2
Sample Output
100000000
1
分析:由于数据量比较大,不适合建立大的hash表来统计数据。相反利用异或运算的性质,
1)可交换性 A XOR B XOR A = (A XOR A) XOR B
2) 奇数次异或结果为本身,偶数次异或结果为0。 A XOR A =0 , 0 XOR A =A
直接计算。
View Code
//2011-10-26 //AC //在输入的数列中 找唯一出现奇数次的一个数。 //思路:利用^(XOR)运算的可交换性和 异或两次就为0,奇数此为它本身的性质 //不需要开额外的空间 #pragma once #include<iostream> using namespace std; #include<string.h> #include <time.h> int main() { int n, a,b;; while(cin>>n && n>0) { clock_t start=clock(); a=0; for(int i=0;i<n;i++){ cin>>b; a^=b; } cout<<a<<endl; cout<<clock()-start<<endl; } return 0; }
相关文章推荐
- 1003: FFF团的情侣活动--课程作业--找出N个数字中唯一出现奇数次的数
- 找出奇数个数中唯一出现一次的数
- 剑指offer解题报告(Java版)——数组中只出现一次的数字 40
- 剑指Offer 面试题35:第一个只出现一次的字符 解题报告(华为OJ034-找出字符串中第一个只出现一次的字符)
- Find a number HNUST OJ 1517 (位运算 判断一列数字中出现的唯一一个奇数数字)
- 如何找出数组中出现次数为奇数次的唯一元素
- Find a number HNUST OJ 1517 (位运算 判断一列数字中出现的唯一一个奇数数字)
- Find a number HNUST OJ 1517 (位运算 判断一列数字中出现的唯一一个奇数数字)
- 互联网面试题:一个数组中找出三个出现奇数次的数字中的一个
- 程序员面试题目总结--数组(二)【二分查找、找出给定数字出现次数、两个有序整型数组交集、找出数组中唯一的重复元素、判断数组中的数值是否连续相邻】
- Find a number HNUST OJ 1517 (位运算 判断一列数字中出现的唯一一个奇数数字)
- Find a number HNUST OJ 1517 (位运算 判断一列数字中出现的唯一一个奇数数字)
- 找出一个数组唯一一个出现2次的数字
- Find a number HNUST OJ 1517 (位运算 判断一列数字中出现的唯一一个奇数数字)
- Find a number HNUST OJ 1517 (位运算 判断一列数字中出现的唯一一个奇数数字)
- 解题笔记(24)——找出数组中两个只出现一次的数字(数组)
- 找出数组中唯一出现一次的两个数字
- 【算法题】找出两个只出现奇数次的数字
- 互联网面试题:一个数组中找出三个出现奇数次的数字中的一个
- 解题报告 数字查找