zoukankan      html  css  js  c++  java
  • 260. Single Number III

    一、题目

      1、审题

      

      2、分析

        在线性时间复杂度、常量空间开销的情况下统计出一个整形数组中只出现一次的两个数(其他的数都是出现2次)。

    二、解答

      1、思路

        ①、对数组所有元素进行异或(^) 操作,得到只出现 1 次的这两个数的异或结果 diff。

        ②、diff &= -diff ,得到只出现一次的两个数的二进制形式的第一个不同的位置 a。

        ③、初始化结果数组{0, 0},遍历数组中的元素,若 a = 1,则与结果数组中第一个元素进行异或;若 a = 0 ,则与第二个元素进行异或。

        ④、返回结果数组。

        public int[] singleNumber(int[] nums) {
            // Pass 1 : 
            // Get the XOR of the two numbers we need to find
            int diff = 0;
            for(int num: nums)
                diff ^= num;
            // Get its last set bit
            diff &= -diff;
            
            // Pass 2 :
            int[] rets = {0, 0};
            for(int num: nums) {
                if((num & diff) == 0)
                    rets[0] ^= num;
                else 
                    rets[1] ^= num;
            }
            
            return rets;
        }
  • 相关阅读:
    「分块」学习笔记
    「NOIP 2017」逛公园
    大假期集训模拟赛15
    大假期集训模拟赛14
    大假期集训模拟赛13
    nginx 日志升级
    nginx 日志切割
    nginx 健康检查
    sftp 管理
    Prometheus 学习
  • 原文地址:https://www.cnblogs.com/skillking/p/9989342.html
Copyright © 2011-2022 走看看