1: class Solution {
2: public:
3: vector<int> singleNumber(vector<int>& nums) {
4: int mixed = 0, single1 = 0, single2 = 0;
5: for (int i = 0; i < nums.size(); i++) {
6: mixed ^= nums[i];
7: }
8: int j = 1;
9: while ((mixed & j) == 0) j <<= 1;
10: for (int i = 0; i < nums.size(); i++) {
11: if (nums[i] & j) single1 ^= nums[i];
12: }
13: single2 = mixed ^ single1;
14: return vector<int>{single1, single2};
15: }
16: };
Saturday, August 13, 2016
260. Single Number III
The idea is to get a mixed one first by xor all numbers. Then get the first bit 1 from the right to left in the mixed number which means that single1 differs single2 in that bit. And then scan the array again using this bit to differentiate single1 and single2.
Labels:
array,
bit manipulation,
leetcode
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment