leetcode: (260) Single Number III

来源:互联网 发布:淘宝上丰胸霜可信吗 编辑:程序博客网 时间:2024/05/03 20:25

【Question】

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?
思路:对整个数组异或。得到的结果为两个只出现一次的数a,b的异或的结果c,随便找到c的二进制位中1的位置,依次在数组中找出该位置二进制位为1的数,依次进行异或,得到结果为a,b中的一个数,然后在于c以后可以得到另一个数。

vector<int> singleNumber(vector<int>& nums) {          int temp=nums[0];          for(int i=1;i<nums.size();i++)              temp^=nums[i];          int key=temp;          int count=0;          while(key)          {              if(key%2==1)               {                  count++;                  break;              }              count++;              key/=2;          }  int first=temp;          for(int i=0;i<nums.size();i++)          {  int j=count;  int key1 = nums[i];  while(j-1)  {  key1/=2;  j--;  }  if(abs(key1%2)==1)                first^=nums[i];          }          int second=temp^first;          nums.clear();          nums.push_back(first);          nums.push_back(second);          return nums;}




0 0
原创粉丝点击