求数组中只出现一次的数---异或操作
2020-08-23 16:58
169 查看
1.数组中除了一个数外,其余数都出现两次,求只出现一次的数
2.数组中除了两个数外,其余数都出现两次,求只出现一次的数
/*找出数组中只出现一次的数*/ //考察异或操作 #include <iostream> #include <cstdio> using namespace std; //只有一个 int getSigle(int array[], int len) { int ret = 0; for (int i = 0; i < len; i++) { ret ^= array[i]; //与0异或,不改变数值 } return ret; } //数组中有两个只出现一次的数 //将数组分解为两个子数组,每个子数组只有一个出现一次的数 //对两个子数组执行只有一个出现一次的数的操作 void getSigle2(int array[], int len) { int retTemp = 0; int num1 = 0; int num2 = 0; int tag = 1;//用来求解划分位置 for (int i = 0; i < len; i++) { retTemp ^= array[i]; } //找到异或结果中第一个不为0的位置 //这说明两个出现一次的数,在这个位置第一次不同(异或为1,说明该位不同) //以此为为划分依据,划分数组 while ((tag & retTemp) == 0) { tag = tag << 1; } for (int j = 0; j < len; j++) { if ((array[j] & tag) == 0) { num1 ^= array[j]; } else { num2 ^= array[j]; } } cout << num1 << " " << num2 << endl; } int main() { int a[] = { 1, 2, 5, 3, 1, 2, 3 }; int len = sizeof(a) / sizeof(a[0]); int ret1 = getSigle(a, len); cout << ret1 << endl; int b[] = { 1, 2, 3, 1, 2, 5 }; int len2 = sizeof(b) / sizeof(b[0]); getSigle2(b, len2); system("pause"); return 0; }
相关文章推荐
- 剑指offer--数组中只出现一次的数字--异或运算、二进制运用
- 异或的应用 及剑指offer 面试 40 数组中只出现一次的数字
- 剑指offer java版 test40—异或,满足交换律。找出数组中只出现了一次的数字。
- 数组中只出现一次的两个数(异或)
- 百度面试题之找出数组中之出现一次的两个数(异或的巧妙应用)
- 异或运算的经典算法题:找出数组中只出现一次的数字,其它数字都出现了两次
- 数组中只出现一次的问题(异或问题)
- 找出数组中两个只出现一次的数字--分组异或
- 数组中只出现一次的数字(异或方法)
- 找出数组中两个只出现一次的数字;异或运算^的一个作用
- (经典的异或技巧)数组中只出现一次的数字 (两种方法)
- 面试题:找出数组中只出现一次的2个数(异或的巧妙应用)(出现3次)
- 码农小汪剑指Offer之38-数组中只出现一次的数字 异或运算的运用
- Java位运算的应用(异或运算)-求数组中唯一只出现一次的元素(LeetCode136)
- 位操作相关题目-数组中某数字只出现了一次及多种进阶版本
- 求数组中都是成对出现的数中,只出现一次的数字——异或的方法
- 数组中只出现一次的数字
- 【笔试】51、数组中只出现一次的数字
- 【追求进步】数组中只出现一次的数字
- 数组中只出现一次的数字