剑指offer(37)-数组中只出现一次的数字
2016-06-18 18:38
260 查看
题目描述
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。代码
class Solution { public: void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) { if (data.size() < 2) { return; } int resultExclusiveOR = 0; for (int i = 0; i < data.size(); i++) { resultExclusiveOR ^= data[i]; } unsigned int index0f1 = FindFirstBitIs1(resultExclusiveOR); *num1 = *num2 = 0; for (int j = 0; j < data.size(); j++) { if (isBit1(data[j], index0f1)) { *num1 ^= data[j]; }else{ *num2 ^= data[j]; } } } // 在整数中num的二进制表示中找到最右边是1的位 unsigned int FindFirstBitIs1(int num){ int indexBit = 0; while (((num & 1) == 0) && (indexBit < 8 * sizeof(int))) { num = num >> 1; ++ indexBit; } return indexBit; } // 判断在num的二进制表示中从右边数起的indexBit位是不是1. bool isBit1(int num,unsigned int indexBit){ num = num >> indexBit; return num & 1; } };
相关文章推荐
- ruby 数组使用教程
- Ruby中的数组和散列表的使用详解
- C#实现AddRange为数组添加多个元素的方法
- C#比较二个数组并找出相同或不同元素的方法
- C#动态调整数组大小的方法
- 详解Lua中的数组概念知识
- Perl中的列表和数组学习笔记
- 探索PowerShell (八) 数组、哈希表(附:复制粘贴技巧)
- C#中数组初始化与数组元素复制的方法
- C#交错数组用法实例
- Linux Shell 数组建立及使用技巧
- PowerShell数组的一些操作技巧
- C#通过yield实现数组全排列的方法
- C#不重复输出一个数组中所有元素的方法
- C#实现将数组内元素打乱顺序的方法
- C#中用foreach语句遍历数组及将数组作为参数的用法
- 详解C#编程中一维数组与多维数组的使用
- Ruby简明教程之数组和Hash介绍
- 深入解析C#中的交错数组与隐式类型的数组
- C语言查找数组里数字重复次数的方法