[LeetCode] Single Number III

来源:互联网 发布:葫芦娃爷爷阴谋 知乎 编辑:程序博客网 时间:2024/05/16 10:05

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?

解题思路

位运算。与Single Number的区别在于首先根据所有元素的亦或结果的某一位是否为1进行分组,然后分别找出每组中的Single Number。

实现代码

Java:

// Runtime: 2 mspublic class Solution {    public int[] singleNumber(int[] nums) {        int xor = 0;        for (int num : nums) {            xor ^= num;        }        int bit = xor & (~(xor - 1));        int single[] = new int[2];        for (int num : nums) {            if ((num & bit) != 0) {                single[0] ^= num;            } else {                single[1] ^= num;            }        }        return single;    }}
0 0
原创粉丝点击