题解 | #数组中只出现一次的数字#

数组中只出现一次的数字

http://www.nowcoder.com/practice/e02fdb54d7524710a7d664d082bb7811

解题思路大概:1、首先这个题目是说其他重复出现的数字出现次数是两次,这时候我们就可以考虑异或运算的性质,一次遍历整个数组的异或运算能够得到两个只出现一次的数字异或结果,其他出现两次的在异或中都变成了0,0异或其他数字都为其他数字。2、考虑这两个只出现一次的数字异或后的结果一定有某一位为1,我们找到这个1的位数。3、根据这个位数,把原数组分为两次,这两组数组中只会含有一个只出现一次的数字,然后存储。

//将num1[0],num2[0]设置为返回结果
public class Solution {
    public static void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) {
        //得到两个只出现一次的数异或后的结果
        int res=0;
        for(int i:array){
            res=res^i;
        }
        //记录哪个位置出现1
        int temp=0;
        for(temp=0;temp<32;temp++){
            //计算哪一位需要用到算数右移>>,算出来的结果类似于res/2^temp;
            if(((res>>temp)&1)==1){
                break;
            }
        }
        //把数组分成两半
        for(int i:array){
            if(((i>>temp)&1)==1){
                num1[0]=i^num1[0];
            }else {
                num2[0]=i^num2[0];
            }
        }
    }
}
全部评论

相关推荐

10-09 19:08
已编辑
门头沟学院 Java
后端转测开第一人:换个模版 技术栈写的精炼紧凑一点 多投就行
点赞 评论 收藏
分享
牛客吹哨人:哨哥晚点统一更新到黑名单:能救一个是一个!26届毁意向毁约裁员黑名单https://www.nowcoder.com/discuss/1525833
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务