2016-10-13 08:01发布
有一堆数,其中有两个数出现了一次,其他的数都出现了两次。怎样将这两个只出现一次的数找出来?排除打表,统计外有什么更为高效的方法。
result=0;for(auot i : array)result^=i;
时间复杂度 O(n)空间复杂度 O(1)
剑指offer上的一题,用三次异或操作。
1先把所有数字 做 异或操作 得到数字 S2 从高到低位检查 S 的 bit 找到第一个 1 3 检查所有数字 根据 这个bit位是1 还是 0 把 原来的数组划分为 两个4 对每个数组 ,把数组内的数字做 异或操作。分别得到数字 A ,B5 数字 A ,B 即为所求
使用位运算^。
应该可以用桶排序
PS:平时没事可以做做 leetcode,我的题解 repo https://github.com/hanzichi/l...
参考我的文章 http://www.cnblogs.com/zichi/... 第三小节
最多设置5个标签!
付费偷看金额在0.1-10元之间
result=0;
for(auot i : array)
result^=i;
时间复杂度 O(n)
空间复杂度 O(1)
剑指offer上的一题,用三次异或操作。
1先把所有数字 做 异或操作 得到数字 S
2 从高到低位检查 S 的 bit 找到第一个 1
3 检查所有数字 根据 这个bit位是1 还是 0 把 原来的数组划分为 两个
4 对每个数组 ,把数组内的数字做 异或操作。分别得到数字 A ,B
5 数字 A ,B 即为所求
使用位运算^。
应该可以用桶排序
PS:平时没事可以做做 leetcode,我的题解 repo https://github.com/hanzichi/l...
参考我的文章 http://www.cnblogs.com/zichi/... 第三小节
一周热门 更多>