栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

找出数组中只出现1次的数,其余数均出现2次,扩展,其余数出现2次以上

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

找出数组中只出现1次的数,其余数均出现2次,扩展,其余数出现2次以上

参考回答:

位运算题目,

位运算中异或的性质:两个相同数字异或=0,一个数和0异或还是它本身。当只有一个数出现一次时,我们把数组中所有的数,依次异或运算,最后剩下的就是落单的数,因为成对儿出现的都抵消了。

public static int find1From2(int[] a){int len = a.length, res = 0;for(int i = 0; i < len; i++){res = res ^ a[i];}return res;}

扩展:

public static int find1From3(int[] a){int[] bits = new int[32];int len = a.length;for(int i = 0; i < len; i++){for(int j = 0; j < 32; j++){bits[j] = bits[j] + ( (a[i]>>>j) & 1);}}int res = 0;for(int i = 0; i < 32; i++){if(bits[i] % 3 !=0){res = res | (1 << i);}}return res;}

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/364327.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号