260. Single Number III

来源:互联网 发布:sql 修改列属性 编辑:程序博客网 时间:2024/04/25 07:58

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?

Credits:
Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.

Subscribe to see which companies asked this question

public class Solution {   public int[] singleNumber(int[] nums) {          int[] res = new int[2];  //这两个数字肯定有至少一位是不同的,故将数列按这一位分成两类,分别异或即可(Single Number I        int result = nums[0];          for(int i=1;i<nums.length;i++){              result = result^nums[i];          }          res[0] = 0;          res[1] = 0;          int n = result & (~(result-1));          for(int i=0;i<nums.length;i++){              if((n & nums[i])!=0){                  res[0] = res[0] ^ nums[i];              }else {                  res[1] = res[1] ^ nums[i];              }          }          return res;      }  }

0 0