zoukankan      html  css  js  c++  java
  • 剑指offer——数组中只出现一次的数字

    数组中只出现一次的数字

    一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。

    在位运算中的异或 ^ 可以将两个相等的数组消去,而在这一题目中,有两个不相等的数字,所以他们之间至少有一位不同

    含有1(如5和2  1001  0010)异或之后的结果是1011,在数组中,按照1的位置这一结果的不同,

    将这些数分为两份,一份是第一位为1的,另外一份是为0的,

    其中那两个不一样的数字会因为这个而分开,进而可以用异或来求出

    //num1,num2分别为长度为1的数组。传出参数
    //将num1[0],num2[0]设置为返回结果
    public class Solution {
        public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) {
            int len = array.length;
            int num = array[0];
            for(int i = 1; i < len; i++){
                num ^= array[i];
            }
            int flag = 1;
            while(num != 0){
                if((num & flag) == 0) flag = flag << 1;
                else break;
            }
            num1[0] = num2[0] = num;
            for(int i = 0; i < len; i++){
                if((array[i] & flag) == 0){
                    num1[0] ^= array[i];
                } else{
                    num2[0] ^= array[i];
                }
            }
        }
    }
    

      

  • 相关阅读:
    神经网络回顾-感知机
    遗传算法杂记
    差分进化算法DE和粒子群算法PSO
    遗传算法GA
    Caffe学习 五 conv_layer与im2col
    Selenium
    Selenium
    Selenium
    Selenium
    Selenium
  • 原文地址:https://www.cnblogs.com/SkyeAngel/p/8668706.html
Copyright © 2011-2022 走看看