标签:
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:
[5, 3]
is
also correct.相关题目:
LeetCode OJ 之 Single Number (唯一的数字)
LeetCode OJ 之 Single Number II (唯一的数字 - 二)
参考:http://blog.csdn.net/u012243115/article/details/45286963。
class Solution { public: vector<int> singleNumber(vector<int>& nums) { vector<int> result; int len = nums.size(); if(len < 2) return result; int tmp = 0; for(int i = 0 ; i < len ; i++) tmp ^= nums[i]; int indexOfOne = 0; for(int i = 0 ; i < 32 ; i++) { if( (tmp & (1 << i) ) != 0) //注意:位操作符&的优先级很低,这里要加()。这里用1做移位操作比用tmp做移位操作更好,因为如果tmp是负数,右移的话前面会补1.(尽管这里不影响结果,但是最好还是不要对tmp做移位操作) { indexOfOne = i; break; } } int tmp2 = (1 << indexOfOne) ; int num1 = 0 , num2 = 0; for(int i = 0 ; i < len ; i++) { if(nums[i] & tmp2 ) num1 ^= nums[i]; else num2 ^= nums[i]; } result.push_back(num1); result.push_back(num2); return result; } };
版权声明:转载请注明出处。
LeetCode OJ 之 Single Number III (唯一的数字-三)
标签:
原文地址:http://blog.csdn.net/u012243115/article/details/47780705