博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在其他数都出现偶数次的数组中找到出现次数为奇数次的数
阅读量:4171 次
发布时间:2019-05-26

本文共 755 字,大约阅读时间需要 2 分钟。

参考自程序员代码面试指南

其他数都出现偶数次的数组中找到出现奇数次的数字 整数n与0异或的结果为n,n与n异或的结果为0

public void printOddTimesNum1(int[] arrs){        int eO=0;        for(int x:arrs){            eO=eO^x;        }        System.out.println(eO);    }
如果只有a和b出现了奇数次,那么最后的eO一定是a^b。如果数组中出现了两个奇数次的数最终eO一定不等于0。那么肯定可以在32位整数eO上找到一个不为0的bit位。假设是第k位不等于0,说明a和b的第k位一定是一个是0,一个是1,接下来再设置一个变量记为eHasOne,然后再遍历一次数组。这次遍历时,eHasOne只和第k位是1的整数异或,其他的数忽略。那么在第二次遍历之后,eHasOne就是a或b中的一个。eO^eHasOne就是另一个出现奇数次的数。
public void printOddTimesNum2(int[] arrs){        int eO=0,eHasOne=0;        for(int x:arrs){            eO=eO^x;        }        int rightOne=eO&(~eO+1);        for(int cur:arrs){            if((cur&rightOne)!=0){                eHasOne^=cur;            }        }        System.out.println(eHasOne+ " " +eO);    }

 

转载地址:http://fryai.baihongyu.com/

你可能感兴趣的文章
python web框架企业实战详解(第六期)\第三课时-css&bootstrap
查看>>
python web框架企业实战详解(第六期)\第三课时-ajax&jquery&webpy
查看>>
python web框架企业实战详解(第六期)\第二课时-pickle&__eq__
查看>>
python web框架企业实战详解(第六期)\第一课时-sorted&if&for
查看>>
python web框架企业实战详解(第六期)\第四课时-webpy&django
查看>>
db2 - DETACH & ATTACH PARTITION
查看>>
How is map() implemented internally in Python?
查看>>
导出所有DB2存储过程的四种方法
查看>>
py - understanding zip function
查看>>
DB2 LOAD 工具使用技巧集合
查看>>
db2 - Partitioning on Multiple Columns
查看>>
db2 - 如何在shell中获取存储过程OUT型参数的返回值(awk)
查看>>
RANK() OVER(PARTITION BY deptno ORDER BY empno)
查看>>
Shell开发的一些技巧和经验
查看>>
C++内存问题(很多公司面试的题目,值得一看,看懂了别忘了告诉我)
查看>>
VBS递归遍历文件夹
查看>>
JCSetter.vbs(Java CLASSPATH Setter)
查看>>
Java中日期的使用
查看>>
VBA创建类事件
查看>>
深入理解递归函数的调用过程
查看>>