[leetcode-260-Single Number III]

Posted hellowOOOrld

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[leetcode-260-Single Number III]相关的知识,希望对你有一定的参考价值。

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].
Note:
The order of the result is not important. So in the above example, [5, 3] is also correct.
Your algorithm should run in linear runtime complexity.
Could you implement it using only constant space complexity?

思路:

1.assume that A and B are the two elements which we want to find;

2.use XOR for all elements,the result is : r = A^B,we just need to distinguish A from B next step;

3.if we can find a bit ‘1‘ in r,then the bit in corresponding position in A and B must be different.We can use {last = r & (~(r-1))} to get the last bit 1 int r;

4.we use last to divide all numbers into two groups,then A and B must fall into the two distrinct groups.XOR elements in eash group,get the A and B.

vector<int> singleNumber1(vector<int>& nums) {
         int r = 0, n = nums.size(), i = 0, last = 0;
         vector<int> ret(2, 0);

         for (i = 0; i < n; ++i)
             r ^= nums[i];

         last = r & (~(r - 1));
         for (i = 0; i < n; ++i)
         {
             if ((last & nums[i]) != 0)
                 ret[0] ^= nums[i];
             else
                 ret[1] ^= nums[i];
         }

         return ret;
     }

参考:

https://discuss.leetcode.com/topic/34545/share-my-c-solution








以上是关于[leetcode-260-Single Number III]的主要内容,如果未能解决你的问题,请参考以下文章

[leetcode-260-Single Number III]

leetcode260. Single Number III

[LeetCode] 260. Single Number III(位运算)

LeetCode-- 260. Single Number III

[LeetCode] 260. Single Number III 单独数 III

LeetCode 260. Single Number III