zoukankan      html  css  js  c++  java
  • Java实现 LeetCode 260 只出现一次的数字 III(三)

    260. 只出现一次的数字 III

    给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。

    示例 :

    输入: [1,2,1,3,2,5]
    输出: [3,5]
    注意:

    结果输出的顺序并不重要,对于上面的例子, [5, 3] 也是正确答案。
    你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?

    PS:
    1、两个相同的数异或结果为0
    2、任意数异或0都为任意数
    3、按位异或不同则为1,相同则为0

    class Solution {
         public int[] singleNumber(int[] nums) {
            int key = 0;
            for (int num : nums) {
                key ^= num;
            }
            
            //  保留位中最右边的1,且将其余为设为0
            //这两个数在1这个位置上不一样,一个是0一个是1
            key = key & (-key);
            int[] res = new int[2];
            for (int num : nums) {
                if ((num & key) == 0) {
                    res[0] ^= num;
                } else {
                    res[1] ^= num;
                }
            }
            return res;
        }
    }
    
  • 相关阅读:
    1-29反射
    1-28Map简介
    1-27TreeSet简介
    1-26HashSet简介
    1-25泛型
    1-24List三个子类的特点
    1-23集合概述
    Java接口
    1-22日期类型
    简易计算器的实现
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13075304.html
Copyright © 2011-2022 走看看