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

    题目描述

    一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
     
     
     
    这个题是另一个题的进化版本         一个整型数组里除了一个数字之外,其他的数字都出现了两次。请写程序找出这这个只出现一次的数字。
    这个题只需要从0开始 从头到尾异或一遍,最后的结果就是那个数字(原理,0异或任何数字都是原来的数字,两个相同的数字异或为0)。
     
    这个题也是用 0从头到尾异或一遍,最后的结果就是这两个出现过一次的数字的异或的结果,找到这个结果中某一个为一的一位(2进制中的为一的位置),那么这两个数字中这一位
    肯定不同,因为是异或出来的结果。   比如是倒数第三位 ,那么让所有的数字 都与4异或,等于0的一组,不等于0的一组,在两组中分别求那一个单独出现的数字
     
    可以在判断属于哪一组的时候直接异或,最后的两个结果就是那两个数字
    过程看起来很复杂,代码其实很简单
    //num1,num2分别为长度为1的数组。传出参数
    //将num1[0],num2[0]设置为返回结果
    public class Solution {
        public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) {
            int beforeans=0;
            for(int i=0;i<array.length;i++){
                beforeans=beforeans^array[i];
            }
            int n=1;
            if((beforeans&n)==0) n<<=1;  
            int i=0,j=0;
            for(int k=0;k<array.length;k++){
                if((array[k]&n)==0) i^=array[k];
                else j^=array[k];
            }
            num1[0]=i;
            num2[0]=j;
        }
    }
  • 相关阅读:
    CDN的基本工作过程
    受控组件和非受控组件
    【转】深入理解margin
    【转】前端面试
    centos7下 mysql5.7离线安装
    HIVE客户端启动缓慢处理步骤
    arthas使用介绍
    Hive重写表数据丢失风险记录
    namenode 问题小记
    Kafka丢失数据问题优化总结
  • 原文地址:https://www.cnblogs.com/tobemaster/p/5925328.html
Copyright © 2011-2022 走看看