找出数组中两个只出现一次的数字
2017-01-13 19:54
232 查看
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。
#define N 2 //二进制中第一个1 int getFirstOne(int num) { int i = 0; while (!(num & 1 << i)) { i++; } return i; } int* find2Unique(int* arr, int len) { int* result = new int ; memset(result, 0, sizeof(int) * len); int difOr = 0; for (int i = 0; i < len; ++i) { difOr ^= arr[i]; } //第一个1就是2个数二进制中第一个不同的位,可用来分组 int difIndex = getFirstOne(difOr); for (int i = 0; i < len; ++i) { if (arr[i] & 1 << difIndex) { result[0] ^= arr[i]; } else { result[1] ^= arr[i]; } } return result; }
相关文章推荐
- 每天一道算法题10 找出数组中两个只出现一次的数字
- 100题_34 找出数组中两个只出现一次的数字
- 【每日面试题】找出数组中两个只出现一次的数字
- 找出数组中唯一出现一次的两个数字
- 找出数组中两个只出现一次的数字
- 程序员面试100题之三十四,找出数组中两个只出现一次的数字
- 算法题6 找出整数数组中两个只出现一次的数字
- 找出数组中两个只出现一次的数字
- 【转帖】找出数组中两个只出现一次的数字
- 解题笔记(24)——找出数组中两个只出现一次的数字(数组)
- 每天一道算法题10 找出数组中两个只出现一次的数字
- [数组]找出数组中两个只出现一次的数字
- 找出数组中两个只出现一次的数字
- 程序员面试题精选100题(34)-找出数组中两个只出现一次的数字
- 找出数组中两个只出现一次的数字
- 面试题_找出数组中两个只出现一次的数字
- 程序员面试题精选100题(34)-找出数组中两个只出现一次的数字
- 【算法14】找出数组中两个只出现一次的数字
- 找出数组中两个只出现一次的数字--分组异或
- 找出数组中两个只出现一次的数字 [No. 30]