题目说明
1 |
|
解题思路
- 求出数组异或的结果。因为相同值的异或为0,所以最后异或的结果为两个不同数的异或结果res。
- 将两个不同的值分别分割到两个不同的数组中。取res二进制中任意一位值为1的位置,作为区分标志flag。(1,说明两个不同值的二进制,在该位处的值一个为0,一个为1)
- 遍历数组 根据(nums[i] & flag)的值区分为两个数组,并求出两个数组的异或结果。
- 由于两个不同值被分开,并且相同值对同一值的位与(&)操作是相同的。所以,两个数组内除了不同值,其他都是由n对相同值构成,所以最后的异或操做是排除了n对相同值,最后分别得出了两个不同值。
代码实现
1 | /** |