260. Single Number III

来源:互联网 发布:淘宝打折那个软件 编辑:程序博客网 时间:2024/04/26 03:56

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:

  1. The order of the result is not important. So in the above example, [5, 3] is also correct.
  2. Your algorithm should run in linear runtime complexity. Could you implement it using only constant space complexity?
题意:数组里有两个单独的数,找出它们。

思路:异或运算以及位运算的使用。

class Solution {public:vector<int> singleNumber(vector<int>& nums) {vector<int> res(2, 0);const int size = nums.size();if (size < 2)return nums;int tmp = 0;for (int i = 0; i < size; i++)tmp ^= nums[i];int p = 0;while ((tmp & 1) == 0){tmp >>= 1;p++;}tmp = 1 << p;for (int i = 0; i < size; i++){if ((nums[i] & tmp) == 0){res[0] ^= nums[i];}elseres[1] ^= nums[i];}return res;}};









0 0