【试题***】找出落单的数/数组中只出现一次的数

数组中只出现一次的数字

https://www.nowcoder.com/questionTerminal/e02fdb54d7524710a7d664d082bb7811

找出落单的数/数组中只出现一次的数

题目:

一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。

解题思想:

异或的特性:0^任意数=任意数,任意数^任意数=0;异或计算的无序性(即1^2^3 = 2^3^1)
1.对原数组所有的数异或得到两个不重复数的异或结果
2.根据两个不重复数的异或结果的二进制位的差异,将原数组分为两组(每组中有一个不重复数)
如:两个数如果分别是 6 和 7
0000 * * * 00 0110
0000 * * * 00 0111
根据原数组中所有数的二进制位最后一位是0或1,将原数组分为两组。
3.再分别对两组数异或

//num1,num2分别为长度为1的数组。传出参数
//将num1[0],num2[0]设置为返回结果

import java.util.ArrayList;
import java.util.Scanner;

public class Solution {
    public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) {
        int x = 0;
        for(int i = 0; i < array.length; i++){
            x ^= array[i];
        }

        int index = findBitRight1Index(x);

        int res1 = 0, res2 = 0;
        for(int i = 0; i < array.length; i++){
            int temp = array[i];
            if( ((temp >> index) & 1) == 0 ){
                res1 ^= temp;
            }
            else{
                res2 ^= temp;
            }
        }

        num1[0] = res1;
        num2[0] = res2;
    }

    // 两个数异或结果,从右向左找到差异位,将原来的数组分为两组
    public int findBitRight1Index(int number){

        int index = 0;
        while(  (number & 1) == 0 && index < 32){
            number >>= (++index);
        }
        return index;

    }

}
全部评论

相关推荐

03-10 11:23
门头沟学院 Java
点赞 评论 收藏
分享
02-26 09:15
已编辑
蚌埠学院 golang
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 一张图晒出你司的标语 #
4356次浏览 77人参与
# AI面会问哪些问题? #
28127次浏览 565人参与
# 开放七大实习专项,百度暑期实习值得冲吗 #
15329次浏览 223人参与
# 你的实习产出是真实的还是包装的? #
20302次浏览 343人参与
# 找AI工作可以去哪些公司? #
9269次浏览 246人参与
# 春招至今,你的战绩如何? #
65914次浏览 584人参与
# 米连集团26产品管培生项目 #
13382次浏览 285人参与
# 从事AI岗需要掌握哪些技术栈? #
9098次浏览 319人参与
# 中国电信笔试 #
32033次浏览 293人参与
# 你做过最难的笔试是哪家公司 #
34008次浏览 244人参与
# 投递几十家公司,到现在0offer,大家都一样吗 #
340927次浏览 2175人参与
# 哪些公司真双非友好? #
69672次浏览 289人参与
# 阿里笔试 #
178839次浏览 1317人参与
# 机械人避雷的岗位/公司 #
62708次浏览 393人参与
# 小马智行求职进展汇总 #
25139次浏览 80人参与
# 第一份工作一定要去大厂吗 #
14817次浏览 122人参与
# 金三银四,你的春招进行到哪个阶段了? #
22158次浏览 280人参与
# 为了减少AI幻觉,你注入过哪些设定? #
26269次浏览 310人参与
# 应届生第一份工资要多少合适 #
20692次浏览 86人参与
# 沪漂/北漂你觉得哪个更苦? #
9990次浏览 194人参与
# 聊聊你的职场新体验 #
336545次浏览 1895人参与
# HR最不可信的一句话是__ #
6325次浏览 114人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务