IMWeb提升营Day7 | 训练题40:数组中只出现一次的数字
来源:互联网 发布:project软件 编辑:程序博客网 时间:2024/06/07 10:07
题目描述
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
思路
/* * 思路:第一反应是哈希表,第一遍遍历数组完善哈希表,第二遍遍历数组对应的哈希表值找只出现一次的数字 * 但是哈希表的空间开销太大了,毙掉! * 仔细观察题目,会发现其他数字都出现了两次,咦这题目怎么这么熟悉 * 有个关键的知识点:A 异或 A = 0, A 异或 0 = A * 所以我们肯定能求出这两个数的异或值 * 再根据这个值里出现1的那一位,就能把数组分成两部分,每一部分都是一个子问题,只包含一个只出现一次的数字,其他的都是出现两次的 */class Solution {public: void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) { int len = data.size(); if(len <= 1) { *num1 = 0; *num2 = 0; return;} int XORdata = 0; for(int i = 0; i < len; i++){ XORdata ^= data[i]; } int test = 1; while((XORdata & 1) != 1){ XORdata >>= 1; test <<= 1; } vector<int> data0; vector<int> data1; for(int i = 0; i < len; i++){ if(data[i] & test) data0.push_back(data[i]); else data1.push_back(data[i]); } *num1 = 0; *num2 = 0; for(int i = 0; i < data0.size(); i++){ *num1 ^= data0[i]; } for(int i = 0; i < data1.size(); i++){ *num2 ^= data1[i]; } }};
阅读全文
0 0
- IMWeb提升营Day7 | 训练题40:数组中只出现一次的数字
- IMWeb提升营Day7 | 训练题37:数字在排序数组中出现的次数
- IMWeb提升营Day5 | 训练题28:数组中出现超过一半的数字
- IMWeb提升营Day6 | 训练题34:第一个只出现一次的字符
- IMWeb提升营Day7 | 训练题39:平衡二叉树
- IMWeb提升营Day7 | 训练题38:二叉树的深度
- IMWeb提升营Day7 | 训练题41:和为S的连续正数序列
- IMWeb提升营Day7 | 训练题42:和为S的两个数
- IMWeb提升营Day1 | 训练题6: 旋转数组的最小数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- 数组中只出现一次的数字
- unique算法函数去重示例
- 语言泛型
- SessionFactory对象详解----Hibernate-API
- 设计模式
- xposed框架下通过Toast显示任意Application包名
- IMWeb提升营Day7 | 训练题40:数组中只出现一次的数字
- 这个架构能实现吗?
- 如何让sublime text3支持Vue语法高亮显示
- Hexo博客部署-使用github作为保存中转仓库
- sql server建库、建表、建约束技巧
- Jquery二级菜单的显示
- 深入了解 CSS3 新特性
- Spring4学习笔记(五):Bean的自动装配
- Codeforces811C. Vladik and Memorable Trip