[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