题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。
请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。
分析:这是一道很新颖的关于位运算的面试题。
先求异或得出一个结果是这两个数字的异或,必不为0。其二进制至少有一位为1,以这位为准把原数组分为两部分,一部分该位为1数,一部分该位为0数。这两个数必分别在这两个小数组里,且每个小数组除此数之外其他数出现两次,再用异或就可以分别求得。
题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。
请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。
分析:这是一道很新颖的关于位运算的面试题。
先求异或得出一个结果是这两个数字的异或,必不为0。其二进制至少有一位为1,以这位为准把原数组分为两部分,一部分该位为1数,一部分该位为0数。这两个数必分别在这两个小数组里,且每个小数组除此数之外其他数出现两次,再用异或就可以分别求得。