欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

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

程序员文章站 2022-06-23 11:49:07
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字 解题思路:使用位运算的方式进行处理。 java //num1,num2分别为长度为1...

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

解题思路:使用位运算的方式进行处理。

java

//num1,num2分别为长度为1的数组。传出参数
//将num1[0],num2[0]设置为返回结果
public class Solution {
    public void FindNumsAppearOnce(int[] array,int num1[] , int num2[]) {
        if (array == null || array.length <= 4) {
            return;
        }
        int val = array[0];
        for (int i = 1; i < array.length; i++) {
            val = val ^ array[i];
        }
        int index = getFirst(val);
        for (int i = 0; i < array.length; i++) {
            if (isIndex(array[i], index)) {
                num1[0] ^= array[i];
            } else {
                num2[0] ^= array[i];
            }
        }
    }
    private int getFirst(int val) {
        int count = 0;
        while ((val & 1) == 0) {
            val = val >> 1;
            count++;
        }
        return count;
    }
    private boolean isIndex(int val, int index) {
		if (val == 0) {
            return false;
        }
		val = val >> index;
        return (val & 1) == 1;
    }
}