码迷,mamicode.com
首页 > 编程语言 > 详细

LeetCode: SingleNumIII

时间:2015-08-25 21:34:38      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:

题目链接https://leetcode.com/problems/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:

  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?
题意给定一个数组nums,其中除了两个元素只出现一次外,其他元素均出现两次,找出仅出现一次的两个元素
  提示:1.对输出结果的顺序不作要求  2.算法要求线性复杂度
分析仍然是异或的用法,题目较简单,直接看代码,代码中有注释
代码
public class Solution {
    public int[] singleNumber(int[] nums) {
        int[] single = new int[2];
        int[] wei = new int[32];
        int yhResult = 0;
        
        for(int i=0; i<nums.length; i++) {
            yhResult ^= nums[i];
        }
        
        for(int i=0; i<32; i++) {
            if((yhResult & 1<<i) != 0) {<span style="white-space:pre">				</span>//如果异或结果的某位为1,说明两个单数在该位是不同的
                for(int j=0; j<nums.length; j++) {
                    if((nums[j] & 1<<i) != 0)<span style="white-space:pre">				//按该位相同与不同,分两组</span>分别异或,可直接得出结果元素
                        single[0] ^= nums[j];
                    else
                        single[1] ^= nums[j];
                }
                break;
            }
        }
         return single;
    }
   
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

LeetCode: SingleNumIII

标签:

原文地址:http://blog.csdn.net/yangyao_iphone/article/details/47983607

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!