【剑指offer】数组中只出现一次的数
2020-12-13 15:17
标签:经典 == span none 数据结构 现在 空间 set 性能 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 分析: 经典的异或技巧题 两个相同的数字异或的结果为0,一个数和0异或的结果是其本身,假设现在那两个不同的数字是A和B,那么将整个数组的元素依次异或得到的结果ans就是A和B的异或结果 ans的二进制中第k位的1代表A的第k位和B的第k位不同,我们现在按照第k位是否相同将原数组分成两个子数组,那么必定A和B分别分散在两个子数组中,然后将子数组依次异或,得到的结果就是A和B的值! 至于k的取值则可以去第一个1即可 时间复杂度:O(N) 空间复杂度:O(1) 若采用map/set等其他辅助数据结构则需要额外的空间,性能也肯定没有异或法快! 【剑指offer】数组中只出现一次的数 标签:经典 == span none 数据结构 现在 空间 set 性能 原文地址:https://www.cnblogs.com/yinbiao/p/11577238.html题目描述
void FindNumsAppearOnce(vectorint> v,int *k1,int *k2)
{
int n=v.size();
if(n2)
return ;
int ans=0;
//得到k1和k2的异或结果
for(int i=0; i
下一篇:java正则表达式