数组中只出现一次的数字
来源:互联网 发布:macbook卸载windows 编辑:程序博客网 时间:2024/06/06 02:30
class Solution {public: void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) { *num1 = *num2 = 0; if (data.size() < 2) return; int s = 0; for (int i = 0; i < data.size(); ++i) { s ^= data[i]; } int t; for (t = 0; t < 32; ++t) if (s & (1<<t)) break; for (int i = 0; i < data.size(); ++i) { if (data[i] & (1<<t)) *num1 ^= data[i]; else *num2 ^= data[i]; } }};
题目描述
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字
异或的用法:
首先假设在数组中只出现一次的是a和b,那么只要把所有的数异或一次就能得到c=a^b(两个相同的数的异或值为0)由于a!=b所以c中至少有一位为1,所以就选一个为1的位把数组分成两组,那么a和b各占一组,再在各个组中用异或运算就能得到a和b的值了
首先假设在数组中只出现一次的是a和b,那么只要把所有的数异或一次就能得到c=a^b(两个相同的数的异或值为0)由于a!=b所以c中至少有一位为1,所以就选一个为1的位把数组分成两组,那么a和b各占一组,再在各个组中用异或运算就能得到a和b的值了
0 0
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- Collection 和 Collections 的区别(Array和Arrays区别)
- 连通域提取MSER
- iOS UIAppearance使用详解
- Listener监听器
- plsql数据导入 正在跳过表 数据没有被导入
- 数组中只出现一次的数字
- JAVA线程与进程间的通信
- C++的作用域与链接
- 软考-面向对象技术
- 【并行计算】Bitonic Sort(双调排序)基础
- nyoj77开灯问题
- hzoj 2301(莫比乌斯反演)
- php技术对xml文件进行操作
- 【Linux开发】Linux下的多线程编程