标签:ber 结果 note 这一 order number des output NPU
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.
Example:
Input:[1,2,1,3,2,5]
Output:[3,5]
Note:
[5, 3]
is also correct.
和136不同的是,这里有2个只出现一次的数字。还是先把所有数字xor一遍,出来的结果是这两个数的xor,即 tmp = a ^ b,现在需要分离这两个数。可以任选其中的一个为1的位,比如tmp & -tmp,是最右的1,然后把tmp和所有数字相与(&),通过这一步可以把答案的两个数分到两个组,然后再对两个小组分别异或,就可以得到这两个数
time: O(N), space: O(1)
class Solution { public int[] singleNumber(int[] nums) { int[] res = new int[2]; int tmp = 0; for(int k : nums) { tmp ^= k; } tmp &= -tmp; for(int k : nums) { if((k & tmp) == 0) res[0] ^= k; else res[1] ^= k; } return res; } }
reference: http://www.cnblogs.com/grandyang/p/4741122.html
260. Single Number III - Medium
标签:ber 结果 note 这一 order number des output NPU
原文地址:https://www.cnblogs.com/fatttcat/p/10090959.html