LeetCode 260 Single Number III 题解
1.题目:
Given an array of numbers nums, in which exactly two elements appear only once and all the other elements appear exactly twice. Find the two elements that appear only once.
For example:
Given nums = [1, 2, 1, 3, 2, 5], return [3, 5].
题意:
输入一个数组,这个数组中除了两个数之外其他的数都两两对应,找出这两个没有对应的数
2.解题思路:
思路是这样的,先用亦或的位运算,将两两相同的抵消掉,然后留下这两个数的亦或结果。即a^b。
分析这个结果 all=a^b 即如果某位为1,则这一位上a,b的二进制表达不同。所以先取出为1的某一位。然后将数组分成两类,这里介绍下Integer.highestOneBit(x),
具体用法见代码。再对分成两类的数组分别亦或,得到a,b。
3.代码
1 |
|
4.一些总结:
想了好久(捂脸),然后看提示跟自己想的差不多是用位运算。。然还是想不出。看别人代码并不太懂。。最后花了几天终于理清了TUT