LeetCode: SingleNumIII

来源:互联网 发布:我跟肌肉男的夜晚知乎 编辑:程序博客网 时间:2024/06/15 16:26

题目链接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;    }   }

0 0
原创粉丝点击