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].
給你一個數組,里邊所有的數字都是有兩個,只有兩個數字是有一個的,找出這兩個數字并且返回。
代碼如下:
參考代碼
解題思路:把nums里所有的數字求異或(^),得到x_xor_y,然后求出mask,其中mask是這個數字,比如x_xor_y = 0110b , 那么mask = 0010b, 意思就是從右向左,找出第一個為1的位置。這個位置就是這兩個數字在二進制中不同的地方,然后利用這個位置,將所有的數字分開異或,這個位置為1的異或,求出 x; 然后這個位置為0的異或,求出y。然后保存到vector。
求第一個為1的位置,利用公式: x & (~(x - 1))?