LCR004-只出现一次的数字II
2026/9/18 8:20:02 网站建设 项目流程

求解代码

publicintsingleNumber(int[]nums){intans=0;// 遍历int的每一个二进制位,i表示当前处理第i位(0是最低位,31是最高位)for(inti=0;i<32;++i){inttotal=0;// 统计当前第i位的总1数for(intnum:nums){// 提取num的第i位值(0或1)并累加// (num >> i):将num的第i位移到最低位// & 1:保留最低位,消去其他位,得到第i位的实际值(0/1)total+=((num>>i)&1);}// 总1数%3≠0 → 唯一数的第i位是1if(total%3!=0){// 将1写入ans的第i位:1<<i得到第i位为1、其余位为0的数,再和ans做或运算ans|=(1<<i);}}returnans;}

小贴士

对于二进制的每一位(0~31位),数组中所有数的该位上的1,只会来自两部分:
出现3次的数的该位1➕ 出现1次的数的该位1

由于3次的数的1相加后,总数一定是3的倍数,因此该位总1%3的结果,就是唯一数在该位的取值(01)。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询