【数组题目】——剑指offer56-2:数组中唯一只出现一次的数字
面试题56-2数组中出现的次数 题目描述 在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。 解题思路 位运算 如果一个数字出现3次,那它的二进制对应的每一位(0或者1)也出现三次,将他们累加,则一定可以被3整除。 因此,累加后的和能被3整除,那只出现一次的数字二进制对应的那一位是0,否则为1 注意 if((bit&nums[i])!=0) //!=0和==1不一样!,返回结果为0,1,2,4……每一位不同再转化为十进制对应的值。 具体看下图: 输入数组{8,20,20,20},将 (bit&nums[i]) 的结果输出,显示如上图,可见有输出4,16…… 代码 class Solution { public int singleNumber ( int [ ] nums ) { if ( nums == null || nums . length <= 0 ) { return - 1 ; } int len = nums . length ; int [ ] bitSum = new int [ 32 ] ; for ( int i = 0 ; i < len ; i ++ ) { int bit = 1 ; //从低位开始判断 for ( int j = bitSum . length - 1 ; j >= 0 ; j --