设为首页 加入收藏

TOP

[LeetCode] Single Number III
2015-11-21 00:55:21 来源: 作者: 【 】 浏览:1
Tags:LeetCode Single Number III

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:

The order of the result is not important. So in the above example, [5, 3] is also correct. 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 ms
public 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;
    }
}

?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇leetcode笔记:Minimum Path Sum 下一篇HDU 4012Paint on a Wall

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: